使用自己的方法扩展jQueryUI Widget

时间:2012-10-26 15:25:01

标签: javascript jquery jquery-ui

我正在构建一个小部件,但是来自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时自己扩展小部件来实现这一点,但我实际上并不确定如何使其工作。

有可能吗?怎么样? 我应该避免这是一个真正可怕的想法吗?为什么呢?

谢谢!

2 个答案:

答案 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界面。

http://api.jqueryui.com/jQuery.widget/