2013-03-07 48 views
10

WinJSでカスタムイベントのイベントハンドラを作成しようとしています。 私はカスタムイベントを作成し、それを派遣しています - -dispatchEventは同期関数または非同期関数です

var eventObject = document.createEvent("CustomEvent"); 
eventObject.initCustomEvent("dropbomb", true, true, null); 
this._element.dispatchEvent(eventObject); 

私のハンドラがある -

this._element.addEventListener("logtelemetry", function() { 
       console.log("boom"); 
}); 

私はハンドラが呼び出されることを確信することができます私は、これはIEでどのように動作するかあまりわかりません同期して、後ではありませんか?もしそうなら、その証拠は何ですか?

+0

@Mathletics、なぜですか?手動でイベントを送信する場合、なぜすぐに起動しませんか? – gdoron

+0

@godon私は知らないと思います。ドキュメンテーションを読むと、実際の動作ははっきりしません。 – Mathletics

+0

@Mathletics、私の答えのポイント... :) – gdoron

答えて

1

WinJS.Utilities.eventMixinのデフォルトの実装を使用して、ハンドラがただちに呼び出されます。 Theresは延期されません。

あなた個々のハンドラsetTimeout/setImmediate/setInterval/​​、または他のいくつかのカスタムロールの実装を使用することにより、遅延の作業を行うことを選んだことができます。私は100%明確ではないんだということがあることが保証されます

+0

['setImmediate'](https://developer.mozilla.org/en/docs/Web/API/Window/setImmediate)の仕様を標準で見ることを楽しみにしています! –

12

(多分誰かがここでその特定を追加することができます) - あなたはバブルアップDOM要素ツリーにそれらを求めて、DOMイベントについて話している場合は、その

注意

dispatchEventの戻り値は、イベントを処理したリスナーのいずれかがpreventDefaultを呼び出すかどうかを示します。

イベントを処理したリスナーがpreventDefaultを呼び出すかどうかを示す戻り値があるため、同期呼び出しの定義であるすべてのリスナーの実行が終了するまでブロックされません(戻りません)。

上記の引用はthe dispatchEvent specification in DOM Level 2 Eventsの抜粋であり、2000年11月の「推奨」ステータス(標準)を達成しました。この標準since at least IE 9に準拠しています。

.dispatchEventコールの直後にconsole.log文を追加して、"boom"(イベントハンドラの)が常に最初に記録されることに注意してください。

+0

+1私が間違っていたことを親切に知らせてくれてありがとう! – gdoron

+0

良い答え。参考のために、createEvent/initCustomEventは、CustomEvent()コンストラクタの代わりに廃止予定です。https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent – Ryan

関連する問題