2011-06-20 8 views
0

私は、HTML文書に挿入できるノードを返すjavacript関数createMyElementがあると仮定します。 によって作成されたノードのコードは、文書内に挿入されるとすぐにグローバルdocumentのイベントをリスンする必要があります。DOMNodeInsertedIntoDocumentイベントを回避する

私が最初に試みたのは、作成時にノードDOMNodeInsertedIntoDocumentDOMNodeRemovedFromDocumentのリスナーを追加して、必要なリスナーを追加して削除することでした。documentです。

しかし、突然変異イベントは今では廃止されており(ブラウザ間で信頼性が高いとは思われません)、より良い解決策を模索しています。

ノードの作成時にdocumentのイベントのリスナーを追加すると機能します。しかし、メモリとパフォーマンスのリークが発生するため、これは良い解決策ではないようです。ノードがドキュメントから再び削除され、もう必要なくなった後でも、documentのリスナー(およびノー​​ドへの参照)それでもなお存続するだろう。

+0

私は理解していません - なぜ 'createMyElement'によって作成されたノードはドキュメント上のイベントを聴く必要がありますか?イベントリスニングは、通常、逆の方法で動作します。 – robertc

+0

私のアプリケーションは、組み込みイベントシステムを使用してカスタムイベントを生成します。私の考えは、実際にグローバルなイベントであるため、これらのイベントをドキュメントにディスパッチすることでした。例えば。グローバルステートが変更された場合、イベントが送出されます。この状態を使用するすべてのノードは、この変更されたイベントをリッスンする必要があります。 – Marc

答えて

0

私はもともと私の質問をして以来、突然変異イベント、すなわちhttp://www.w3.org/TR/domcore/#mutation-observersで定義されているような突然変異観察の代替が、多くのブラウザに実装されています。

私自身の質問に対する簡単な答えは、ドキュメント上の突然変異オブザーバを使用してノードの挿入または削除をリスンすることです。

しかし、新しいカスタム要素https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/index.htmlを使用すると、カスタム要素にはinsertedCallbackremovedCallbackが与えられます。

関連する問題