Я создал кастомный виджет jQuery UI под названием 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