我正在构建一个小部件,但是来自OOP背景,通过函数调用访问方法似乎很奇怪。
// create the widget in target_id
myWidget = jQuery('#target_id').superWidget();
// this works and accesses do_something, but it's long and redundant.
// After all, myWidget is already a superWidget
myWidget.data('superWidget').do_something('hello');
// also works, but is awkward
myWidget.superWidget('do_something', 'hello');
// what I want to be able to do:
myWidget.do_something('hello');
我认为应该可以通过在调用_create时自己扩展小部件来实现这一点,但我实际上并不确定如何使其工作。
有可能吗?怎么样? 我应该避免这是一个真正可怕的想法吗?为什么呢?
谢谢!
答案 0 :(得分:2)
我们不提供此API的原因是它会产生冲突。如果窗口小部件提供与现有jQuery方法同名的方法会发生什么?如果在同一元素上初始化多个小部件会发生什么?
话虽如此,小部件是纯OO,带有包装器以提供通用的jQuery API。如果您只想使用OO语法,则可以。
var widget = $.ns.superWidget( {}, "#elem" );
widget.doSomething( "hello" );
$.ns.superWidget
函数是一个实际的构造函数。将其作为函数调用只会导致另一个调用new
以强制构造函数行为。
您可能有兴趣阅读jQuery UI 1.9 Upgrade Guide,其中列出了直接构建窗口小部件实例的各种方法。
注意:如果您使用的是jQuery UI 1.8.x,则element参数将不接受选择器,您必须传递DOM元素。
答案 1 :(得分:0)
很抱歉,不支持调用窗口小部件方法的方法jQueryUI Widget Factory界面。