这是一个简单的widget mock:
(function ($) { $.widget("ui.myDummyWidget",{ options: { },_create: function () { },hide: function () { this.element.hide(); },_setOption: function (key,value) { $.Widget.prototype._setOption.apply(this,arguments); },destroy: function () { $.Widget.prototype.destroy.call(this); } }); } (jQuery));
它只添加一个方法隐藏,您可以调用它来隐藏元素。如果从小部件中完成,就很容易
this.hide();
但是常见的情况是您想从外部调用窗口小部件实例上的方法(Ajax更新或其他外部事件)
那么访问窗口小部件实例的最佳方法是什么?一种方法是将元素的引用添加到元素,丑陋的…
_create: function () { this.element[0].widget = this; },
然后你可以从外面访问它
this.dummy = $("#dummy").myDummyWidget(); this.dummy[0].widget.hide();
解决方法
窗口小部件引擎已经做了你想要的:它在内部调用
data()来关联窗口小部件及其各自的元素:
$("#dummy").myDummyWidget(); // Get associated widget. var widget = $("#dummy").data("myDummyWidget"); // The following is equivalent to $("#dummy").myDummyWidget("hide") widget.hide();
更新:从jQuery UI 1.9起,the key becomes the widget’s fully qualified name,with dashes instead of dots.因此,上面的代码变成:
// Get associated widget. var widget = $("#dummy").data("ui-myDummyWidget");