news 2026/5/11 11:00:29

jQuery UI 部件库(Widget Factory)

作者头像

张小明

前端开发工程师

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

jQuery UI 部件库(Widget Factory)

Widget Factory(部件工厂)是 jQuery UI 最核心、最重要的贡献。它是一个强大的插件开发框架,暴露为$.widget()方法,所有 jQuery UI 官方小部件(如 Datepicker、Tabs、Dialog、Accordion、Slider 等)都是基于它构建的。

Widget Factory 的设计目标是解决传统 jQuery 插件的常见痛点,提供一套标准化、状态化、可继承、可扩展的插件开发模式。

官方文档地址:https://api.jqueryui.com/jQuery.widget/

为什么需要 Widget Factory?

普通 jQuery 插件通常存在以下问题:

  • 没有统一 API(初始化、方法调用、选项设置方式各不相同)。
  • 难以维护内部状态(例如进度条的当前值)。
  • 事件命名不一致。
  • 难以继承和扩展。
  • 销毁时清理不彻底。

Widget Factory 完美解决了这些问题,让所有插件拥有统一的生命周期和 API。

核心特性
  1. 统一 API 模式

    // 初始化$("#elem").myWidget({option1:value});// 调用方法$("#elem").myWidget("methodName",arg);// 设置/获取选项$("#elem").myWidget("option","key",value);varval=$("#elem").myWidget("option","key");// 销毁$("#elem").myWidget("destroy");
  2. 生命周期钩子

    • _create():首次创建时调用(相当于构造函数)。
    • _init():每次初始化(包括重新初始化)时调用。
    • _setOption(key, value):选项改变时自动调用。
    • _destroy():销毁时自动调用,用于清理事件、DOM 修改。
  3. 状态管理

    • 实例数据存储在元素的 jQuery data 中:this.element.data("ui-myWidget", this)
    • 支持启用/禁用:enable()/disable()
  4. 事件系统

    • 使用_trigger("eventName", event, data)触发自定义事件。
    • 用户可绑定:$("#elem").on("mywidgetchange", handler)
  5. 继承支持

    • 支持单继承,便于扩展现有部件。
创建自定义部件示例
// 定义一个简单的进度条部件(简化版)$.widget("custom.progress",{// 默认选项options:{value:0,max:100},// 创建时调用_create:function(){this.element.addClass("custom-progress ui-widget ui-widget-content ui-corner-all");this.progressBar=$("<div>").addClass("custom-progress-value ui-widget-header ui-corner-all").appendTo(this.element);this._refreshValue();},// 选项改变时调用_setOption:function(key,value){this._super(key,value);// 调用父类方法if(key==="value"){this._refreshValue();}},// 自定义方法:获取/设置值value:function(newValue){if(newValue===undefined){returnthis.options.value;}this.option("value",newValue);},// 刷新 UI_refreshValue:function(){varpercentage=(this.options.value/this.options.max)*100;this.progressBar.width(percentage+"%");// 触发 change 事件this._trigger("change",null,{value:this.options.value});},// 销毁时清理_destroy:function(){this.element.removeClass("custom-progress ui-widget ui-widget-content ui-corner-all").empty();}});
使用自定义部件
<divid="myProgress"></div><script>$(function(){$("#myProgress").customProgress({value:30});// 绑定事件$("#myProgress").on("customprogresschange",function(event,ui){console.log("当前值:",ui.value);});// 改变值setTimeout(function(){$("#myProgress").customProgress("value",70);},2000);});</script>
继承现有部件示例
// 扩展 Dialog,添加自定义标题图标$.widget("custom.iconDialog",$.ui.dialog,{options:{icon:"ui-icon-info"},_create:function(){this._super();// 调用父类 _createif(this.options.icon){this.uiDialogTitlebar.prepend($("<span>").addClass("ui-dialog-title-icon "+this.options.icon));}}});
总结
  • Widget Factory 是 jQuery UI 最有价值的遗产之一。
  • 它让插件开发变得规范、可维护、可扩展。
  • 所有官方部件(如 dialog、tabs、datepicker)都继承自它,因此行为高度一致。
  • 即使 jQuery UI 项目进入维护模式,Widget Factory 依然是学习插件开发的最佳范例。

如果您想查看某个官方部件(如 Datepicker)的源码实现细节,或需要帮助创建特定功能的自定义部件,欢迎继续提问!

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

24、Windows Phone 8:实时磁贴、通知与数据处理全解析

Windows Phone 8:实时磁贴、通知与数据处理全解析 1. 定制锁屏界面 当用户按下硬件锁屏按钮或手机超时,手机会被锁定。再次按下硬件按钮,锁屏界面就会出现。我们可以让应用成为锁屏内容的提供者,包括锁屏背景、详细状态、快速状态图标和计数等。不过,添加到锁屏的内容应…

作者头像 李华
网站建设 2026/5/11 11:00:23

AI助力Linux中文输入法开发:从零到一键部署

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 使用快马平台生成一个Linux中文输入法的基本框架&#xff0c;要求包含以下功能&#xff1a;1.基于Fcitx或IBus的输入法引擎适配层 2.支持拼音输入的核心算法模块 3.简繁体转换功能 …

作者头像 李华
网站建设 2026/5/10 23:11:07

31、Windows Phone应用设计与发布全流程指南

Windows Phone应用设计与发布全流程指南 一、Blend中的动画设计 在Blend的视角下,动画是随着时间逐步设置属性的过程。你可以定义一个时间点(例如1秒),然后改变该时间点的属性。这些属性变化可以使用故事板(Storyboard)映射到时间轴上,或者使用预定义的缓动函数自动塑…

作者头像 李华
网站建设 2026/5/10 23:47:57

32、Windows Phone应用开发与推广全解析

Windows Phone应用开发与推广全解析 1. 应用提交至Windows Phone应用商店 将应用推向市场的第一步是提交到Windows Phone应用商店。在提交应用页面,点击“审核并提交”按钮,即可将应用发送至商店。不过,提交审核的时间并不固定,应用获得批准可能需要长达5天的时间。如果应…

作者头像 李华
网站建设 2026/5/1 8:24:50

传统vsAI:Chrome插件开发效率对比实验

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请用最快的方式实现一个Chrome插件&#xff1a;1.监控指定网页内容变化&#xff1b;2.当检测到变化时显示桌面通知&#xff1b;3.支持设置监控间隔时间&#xff1b;4.提供简洁的配置…

作者头像 李华
网站建设 2026/5/7 11:14:58

CPI降温驱动的降息预期提振:黄金多头韧性下的AI量化解析

摘要&#xff1a;本文通过分析美11月CPI数据这一关键变量&#xff0c;结合市场情绪、技术面压力以及贵金属联动等多维度因素&#xff0c;运用AI模型对黄金等贵金属的价格波动及市场走势进行深度剖析。一、AI驱动的市场波动特征识别周四&#xff08;12月18日&#xff09;&#x…

作者头像 李华