如何从其原型中销毁 jQuery UI 小部件

How to destroy a jQuery UI widgets from within it's prototype

我已经开始使用 Widget Factory 来创建插件。但是我似乎找不到从内部破坏插件的方法。

到目前为止,在我发现的所有示例和教程中,它们都破坏了 DOM 中的插件。这一切都很好,但我也希望能够从我的原型中销毁插件。

例如,使用不正确的参数或不正确的元素调用插件,或者一段时间后它未验证。我希望能够在之后调用 this.destroy() 并销毁插件。当我调用 this.destroy() 时,它会调用 $.Widget.prototype.destroy() 和我随后的 _destroy() 方法,但实例仍在 DOM 元素上。只有在调用 $(el).pluginName('destroy') 时它才会真正被销毁。

此处为快速示例

假设我们有一些 html

<p>Lorem ipsum</p>

和我们的 jQuery UI 小部件,目的是在它创建后立即销毁它

$.widget('ns.test', {
    _create: function() {
        this.destroy();
    },

    _destroy: function() {}
});

我们调用插件所以

$('p').test();

我希望实例不会设置在 $('p') 上,但它是

$('p').data();
>> Object {ns-test: $.widget.$.(anonymous function).(anonymous function)}

只有当从 DOM 调用方法时它才会被销毁

$('p').test('destroy');
>> Object {}

有什么想法吗?

+blgt 的见解或多或少是正确的。所以我添加它并接受它。

您可以从 _create_init 以外的任何方法调用 this.destroy(),它会按您预期的那样工作,但我不完全确定为什么。可能与 .data 数据的管理方式有关