news 2026/6/15 20:15:54

jQuery UI 如何使用部件库(Widget Factory)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
jQuery UI 如何使用部件库(Widget Factory)

jQuery UI 如何使用部件库(Widget Factory)

jQuery UI 的所有小部件(Datepicker、Tabs、Dialog 等)都基于Widget Factory$.widget)构建。作为开发者,你可以直接使用 Widget Factory 来:

  1. 创建全新的自定义小部件
  2. 扩展现有的 jQuery UI 小部件(最常见的使用方式)。
  3. 利用其统一的 API 和生命周期来管理复杂交互。

下面一步步说明如何在项目中使用 Widget Factory。

1. 前提:引入 jQuery UI

Widget Factory 是 jQuery UI 的一部分,必须引入 jQuery UI 的 JS 文件(它会自动在jQuery.ui命名空间下暴露$.widget)。

<scriptsrc="https://code.jquery.com/jquery-3.7.1.min.js"></script><scriptsrc="https://code.jquery.com/ui/1.14.1/jquery-ui.min.js"></script>
2. 创建一个全新自定义小部件

使用$.widget()定义一个独立的新部件。

// 定义一个简单的计数器小部件$.widget("custom.counter",{// 默认选项options:{value:0,step:1},// 创建时调用(初始化 DOM 和事件)_create:function(){this.element.addClass("custom-counter ui-widget ui-corner-all");this.display=$("<span>").addClass("counter-display").text(this.options.value).appendTo(this.element);this.incrementBtn=$("<button>").text("+").addClass("ui-button ui-state-default").on("click",()=>this._increment()).appendTo(this.element);this.decrementBtn=$("<button>").text("-").addClass("ui-button ui-state-default").on("click",()=>this._decrement()).appendTo(this.element);},// 自定义方法:增加计数_increment:function(){this.value(this.options.value+this.options.step);},// 自定义方法:减少计数_decrement:function(){this.value(this.options.value-this.options.step);},// 公共方法:获取或设置值value:function(newValue){if(newValue===undefined){returnthis.options.value;}this._setOption("value",newValue);},// 选项改变时自动调用_setOption:function(key,value){this._super(key,value);// 调用父类if(key==="value"){this.display.text(value);this._trigger("change",null,{value:value});// 触发 change 事件}},// 销毁时清理_destroy:function(){this.element.removeClass("custom-counter ui-widget ui-corner-all").empty();this._super();}});

使用自定义小部件

<divid="myCounter"></div><script>$(function(){$("#myCounter").customCounter({value:10,step:5});// 绑定事件$("#myCounter").on("customcounterchange",function(event,ui){console.log("当前值:",ui.value);});// 调用方法$("#myCounter").customCounter("value",50);});</script>
3. 扩展现有 jQuery UI 小部件(最实用的方式)

继承官方小部件,只添加或修改需要的功能。

// 扩展 Dialog,添加默认的“帮助”按钮和标题图标$.widget("custom.helpDialog",$.ui.dialog,{options:{helpText:"点击这里获取帮助",iconClass:"ui-icon-help"},_create:function(){this._super();// 先调用父类的 _create// 添加标题图标if(this.options.iconClass){$("<span>").addClass(this.options.iconClass+" ui-dialog-title-icon").prependTo(this.uiDialogTitlebar.find(".ui-dialog-title"));}// 添加帮助按钮varbuttons=this.options.buttons||{};buttons["帮助"]=()=>alert(this.options.helpText);this.option("buttons",buttons);}});

使用扩展后的 Dialog

<divid="helpDlg"title="使用说明">这是一个带帮助按钮的对话框。</div><script>$("#helpDlg").customHelpDialog({modal:true,helpText:"本功能用于演示 Widget Factory 扩展",iconClass:"ui-icon-info"});$("#helpDlg").customHelpDialog("open");</script>
4. 常见 Widget Factory 使用技巧
  • 调用父类方法:始终在重写的方法中先调用this._super()this._superApply(arguments)
  • 触发事件this._trigger("eventName", event, uiData),用户可通过.on("widgetNameeventName", handler)绑定。
  • 访问实例$("#elem").data("custom-counter")获取内部实例(高级用法)。
  • 命名空间:推荐使用自定义命名空间(如custom.ui.myapp.)避免冲突。
总结

在实际项目中,你使用 Widget Factory 的常见场景是:

  • 需要对官方小部件进行小改动(如给 Tabs 加关闭按钮、给 Datepicker 加节假日高亮)。
  • 需要创建项目专用的可复用组件(如表单验证提示、加载按钮、富文本工具栏)。

Widget Factory 提供了统一、一致、可继承的开发方式,让你的自定义组件与 jQuery UI 原生组件无缝融合,并自动享有主题支持、事件系统、状态管理等优势。

如果您有具体需求(如扩展某个官方部件的完整代码),告诉我,我可以提供针对性的实现示例!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 3:21:26

PyRobot:重新定义机器人开发的智能化框架

PyRobot&#xff1a;重新定义机器人开发的智能化框架 【免费下载链接】pyrobot PyRobot: An Open Source Robotics Research Platform 项目地址: https://gitcode.com/gh_mirrors/pyr/pyrobot PyRobot作为开源机器人研究平台&#xff0c;为开发者提供了统一的抽象层&…

作者头像 李华
网站建设 2026/6/15 12:45:34

Update4j:构建Java应用自动更新框架的终极指南

Update4j&#xff1a;构建Java应用自动更新框架的终极指南 【免费下载链接】update4j Create your own auto-update framework 项目地址: https://gitcode.com/gh_mirrors/up/update4j 在现代软件开发中&#xff0c;保持应用程序的最新状态是提升用户体验的关键。Update…

作者头像 李华
网站建设 2026/6/13 10:04:06

故障录波分析终极指南:caap2008X快速上手教程

还在为复杂的电力系统故障分析而烦恼吗&#xff1f;caap2008X这款免安装的故障录波分析软件&#xff0c;将彻底改变你的工作方式&#xff01;&#x1f3af; 【免费下载链接】故障录波分析软件caap2008X 本仓库提供了一个功能强大的故障录波分析软件——caap2008X。该软件专为读…

作者头像 李华
网站建设 2026/6/15 12:46:08

1小时验证创意:用Python快速构建产品原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 生成一个社交媒体应用原型&#xff0c;使用FastAPI框架。核心功能&#xff1a;1) 用户发帖 2) 关注功能 3) 时间线展示 4) 简单搜索。只需实现基本功能流程&#xff0c;UI可以简陋但…

作者头像 李华
网站建设 2026/6/15 12:46:05

45. UVM Register Model Classes

UVM 寄存器模型&#xff1a;从“认识零件”到“理解整个工厂” &#x1f3af; 课程目标&#xff1a;一小时彻底掌握UVM寄存器模型 带你从零开始理解UVM寄存器模型。用工厂控制室这个比喻贯穿始终&#xff0c;保证听的懂&#xff01;&#x1f3ed; 核心比喻&#xff1a;工厂控制…

作者头像 李华
网站建设 2026/6/15 12:45:46

FaceFusion支持RTMP/HLS协议推流,适配直播平台

FaceFusion 支持 RTMP/HLS 推流&#xff1a;打通 AI 换脸与直播生态的关键一步 在虚拟主播、AI 合成内容和实时影像处理日益普及的今天&#xff0c;一个核心问题逐渐浮现&#xff1a;我们如何将高精度的人脸替换结果&#xff0c;从本地演示变成真正可传播、可互动的实时视频流&…

作者头像 李华