Javascript 创建不依赖于DOM元素的小部件
我正在努力使我的代码更干净,为此,我非常喜欢Javascript 创建不依赖于DOM元素的小部件,javascript,jquery,Javascript,Jquery,我正在努力使我的代码更干净,为此,我非常喜欢JQuery小部件。 今天,我想创建一个与Dom元素无关的小部件: $.widget('ui.resaWidget', { options : { viewer : null }... }); 我发现调用此小部件的唯一方法是: $(aDomElement).resaWidget(); 有没有一种方法可以像这样调用我的小部件: $.resaWidget() ? 因为事实上,我的小部件是用于整个页面生成的,而不仅仅是
JQuery小部件。
今天,我想创建一个与Dom元素无关的小部件:
$.widget('ui.resaWidget', {
options : {
viewer : null
}...
});
我发现调用此小部件的唯一方法是:
$(aDomElement).resaWidget();
有没有一种方法可以像这样调用我的小部件:
$.resaWidget() ?
因为事实上,我的小部件是用于整个页面生成的,而不仅仅是用于单个DOM元素
顺便说一下,$('body').resaWidget()
似乎不起作用
感谢您的帮助。有几种创建jQuery插件的方法 最常见的方法是向
jQuery.fn
(实际上与jQuery.prototype
)添加一个函数:
此方法用于添加可在jQuery
实例上调用的函数。即:
$(selector).foo();
jQueryUI的小部件工厂是扩展jQuery.fn
的简写方法
扩展jQuery的另一种常见方法是向
jQuery
本身添加一个函数:
(function ($) {
"use strict";
$.foo = function (/* function parameters */) {
doStuff();
};
}(jQuery));
此方法用于从jQuery
添加静态可调用函数。即:
$.foo();
jQueryUI的小部件工厂无法(目前从1.8开始)创建这些静态函数。使用小部件工厂的主要原因是为了保存上下文。如果您有一个没有上下文的静态函数(不需要
$()
),那么您只需要在函数中编写自己的功能。我知道这是一个老问题,但从jQuery UI 1.9开始,现在,您可以通过将小部件原型上的defaultElement
属性设置为null
来创建非基于dom的小部件,谢谢您的回答。有了这个解决方案,我就失去了widget工厂的所有结构,我不能对私有成员使用“\ux”,而对公共成员则什么也不用。是否有一种方法可以同时利用这两种优势,或者我需要编写自己的工厂代码?每个函数都只能在其关闭范围内访问。标准JavaScript实践不会因为使用jQuery而消失。我个人认为没有必要为静态可访问的函数创建工厂。
$.foo();