3

我正在构建一个小部件,但来自 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 时自行扩展小部件来做到这一点,但我实际上不确定如何让它工作。

是否可以?如何?我应该避免这是一个真正可怕的想法吗?为什么?

谢谢!

4

2 回答 2

2

我们不提供此 API 的原因是它会产生冲突。如果小部件提供与现有 jQuery 方法同名的方法会发生什么?如果在同一个元素上初始化多个小部件会发生什么?

话虽如此,小部件是纯粹的 OO,带有一个提供通用 jQuery API 的包装器。如果您只想使用 OO 语法,则可以。

var widget = $.ns.superWidget( {}, "#elem" );
widget.doSomething( "hello" );

$.ns.superWidget函数是一个实际的构造函数。将其作为函数调用只会导致另一个调用 withnew以强制构造函数行为。

您可能有兴趣阅读jQuery UI 1.9 升级指南,其中列出了直接构建小部件实例的各种方法。

注意:如果您使用的是 jQuery UI 1.8.x,元素参数将不接受选择器,您必须传递一个 DOM 元素。

于 2012-10-26T17:13:21.823 回答
0

抱歉,jQueryUI Widget Factory 接口不支持您调用小部件方法的方式。

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

于 2012-10-26T15:34:36.127 回答