Я начал использовать Widget Factory для создания плагинов. Однако я не могу найти способ уничтожить плагин изнутри.
Во всех примерах и руководствах, которые я нашел до сих пор, они уничтожают плагин из DOM. Это все хорошо, но я также хотел бы иметь возможность уничтожить плагин изнутри моего прототипа.
Скажем, например, плагин вызывается с неверными параметрами или некорректным элементом, или через некоторое время он не проходит проверку. Я хотел бы иметь возможность впоследствии вызвать this.destroy () и уничтожить плагин. Когда я вызываю this.destroy (), он вызывает $ .Widget.prototype.destroy () и мой последующий метод _destroy (), но экземпляр все еще находится в элементе DOM. Только при вызове $ (el) .pluginName ('destroy') он действительно уничтожается.
Быстрый пример здесь
Скажем, у нас есть HTML
<p>Lorem ipsum</p>
и наш виджет пользовательского интерфейса jQuery, который стремится уничтожить его, как только он будет создан
$.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 {}
Есть какие-нибудь мысли?
this.destroy()
из любого метода, кроме_create
и_init
, и он будет работать так, как вы ожидаете, но я не совсем уверен, почему. Вероятно, это как-то связано с тем, как обрабатываются.data
данные - person blgt   schedule 02.04.2015this._trigger
, например, также не будет работать, если запуск не выполняется извне, например, изнутриwindow.setTimeout
. Использованиеthis.destroy()
в другом месте не сработало, если только оно не было инициировано действием пользователя, например щелчком мыши или наведением курсора. Думаю, мне придется с этим жить. В любом случае спасибо - person Dwayne   schedule 02.04.2015