2015-04-02 22 views
0

我已經登上了使用Widget Factory創建插件。然而,我似乎無法找到一種方法來從內部銷燬插件。如何從其原型中銷燬jQuery UI小部件

在我發現的所有示例和教程中,他們銷燬了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 {} 

任何思想的方法,只有當任何人?

+0

你可以從'_create'和'_init'以外的任何方法調用'this.destroy()',它會按照你的期望工作,但我不是完全確定爲什麼。可能與如何管理'.data'數據有關係 – blgt 2015-04-02 10:41:05

+0

謝謝!我試了一下,並做了一些更多的測試,但似乎只要小部件是'發起人',它就無法工作。 例如,調用'this._trigger'將不起作用,除非觸發是從外部完成的,例如從'window.setTimeout'內完成。 在別處使用'this.destroy()'不起作用,除非它是通過用戶操作(如點擊或懸停)啓動的。 猜猜我必須忍受它。不管怎麼說,多謝拉 – Dwayne 2015-04-02 11:35:47

回答

0

+ blgt洞察力或多或少是正確的。所以我加入並接受它。

您可以從_create_init以外的任何方法調用this.destroy(),它會按照您的預期工作,但我不完全確定原因。可能與如何管理.data數據有關