【发布时间】:2012-03-26 18:39:01
【问题描述】:
我创建了名为 uiPopover 的自定义 jQuery UI 小部件,与 UI-dialog 非常相似(事实上,大部分代码都是从它复制粘贴的)。这个小部件有一个自定义的销毁方法,它隐藏小部件并将其从 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 UI 中内置的),并且 destroy 方法尝试调用 remove( ) 再次在我的元素上,然后尝试再次调用 destroy() 等等..
但是,奇怪的是 UI 对话框不会发生这种情况。所以当我这样做时:
$('#element').dialog();
$('#element').remove();
一切正常...我的插件一定有问题,但我不知道是什么问题。
这里是我的插件的完整源代码:https://gist.github.com/2208569
【问题讨论】: