私はuiPopoverと呼ばれるuiPopoverというカスタムjQuery UIウィジェットを作成しました。これはUIダイアログとよく似ています(実際にはほとんどのコードはコピー貼りです)。このウィジェットには、ウィジェットを非表示にしてDOMから削除するカスタムdestroyメソッドがあります。繰り返しますが、これはUIダイアログからコピー貼り付けされています。カスタムUIウィジェットでjQuery .remove()を呼び出すと無限ループが発生する
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を呼び出すとき私のウィジェット(これはjQuery UIに組み込まれています)のdestroy()を呼び出すと、destroyメソッドは自分の要素でremove()をもう一度呼び出そうとし、destroy()をもう一度呼び出すようにします。
しかし、奇妙なことは、これはUIダイアログでは起こらないということです。私はこれを行うときに:
$('#element').dialog();
$('#element').remove();
すべてが大丈夫です...そこに私のプラグインと間違って何かでなければならないが、私は何を把握することはできません。そこではありませんhttps://gist.github.com/2208569
ありがとうございます!これはトリックを行うようだ。しかし、なぜ '$ .ui.dialog'を使って同じように動作しないのかを知ることは面白いでしょう。たぶん私はそれで遊ぶために多くの時間があるとき... – ragulka