如何从内部销毁jQuery UI小部件's原型

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

本文关键字:原型 小部 UI 内部 jQuery      更新时间:2023-09-26

我已经开始使用Widget Factory创建插件了。然而,我似乎找不到从内部销毁插件的方法。

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

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

此处的快速示例

假设我们有一些html

<p>Lorem ipsum</p>

以及我们的jQuery UI小部件,它旨在在创建后立即销毁它

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

我们调用pluging,所以

$('p').test();

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

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

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

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

有什么想法吗?

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

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