Я создал пользовательский виджет пользовательского интерфейса jQuery под названием uiPopover, очень похожий на UI-диалог (на самом деле большая часть кода скопирована с него). Этот виджет имеет собственный метод уничтожения, который скрывает виджет и удаляет его из DOM. Опять же, это в значительной степени копирование-вставка из UI-диалога.
destroy: function() {
var self = this;
if (self.overlay) {
self.overlay.destroy();
}
self.close();
self.element
.removeData('popover');
self.uiPopover.remove();
console.log('afterRemove')
return self;
},
Странно то, что это вызывает бесконечный цикл, который выдает некоторые ошибки:
$('#element').popover();
$('#element').remove();
Насколько я вижу, проблема в том, что когда я вызываю .remove (), он автоматически вызывает destroy () для моего виджета (это встроено в пользовательский интерфейс jQuery), а метод destroy пытается вызвать remove ( ) снова на моем элементе, а затем снова пытается вызвать destroy () и т. д.
Однако странная вещь заключается в том, что этого не происходит с диалогом пользовательского интерфейса. Поэтому, когда я делаю это:
$('#element').dialog();
$('#element').remove();
Все в порядке ... Должно быть, что-то не так с моим плагином, но я не могу понять, что.
Вот полный источник моего плагина: https://gist.github.com/2208569