1

ドキュメントでは、EventDispatcher の dispatchEvent は「...イベントをイベント フローにディスパッチする」と言われています。このフレーズは見栄えがよく、実際には何も説明していません。

オブジェクト「a」でイベント「A」を待機している 2 つのリスナーがあるとします。呼び出し時にどのような動作を期待する必要がありますか。

a.dispatchEvent("A")?

distpatchEvent から戻る前に、両方のリスナーがすぐに呼び出されますか? それとも、フラッシュ プレーヤーの内部キューに入れられ、次のフレームに入って処理されますか? ここで、Flash Player の定義済みの動作に依存できますか、それとも動作が定義されていませんか? 「イベントをイベントフローにディスパッチする」の読み方は?実際にはコードの制御フローに影響を与えるため、質問は重要です。

4

2 に答える 2

2

それはすべて、ディスプレイリストの階層によって異なります。

Flashのイベント構造は、その内部イベントモデルに基づいています。

  1. ステージが最初に通知されるオブジェクトになり、その後、イベントはターゲットに到達するまでディスプレイリストを細流化します。このフェーズは、キャプチャフェーズと呼ばれます。これを有効にするには、イベントリスナーでに設定useCaptureし ます。trueリッスンしているオブジェクトがイベントをターゲットとするオブジェクトの親でない限り、そうすることは無意味であることに注意してください。これは、イベントインターセプトと呼ばれます。

  2. 次のフェーズはターゲットフェーズです。これは、イベントで最も一般的に知られている動作です。ターゲットの表示オブジェクト(イベントのリスナーを持つオブジェクト)は、イベントを受信し、リスナーでコードを実行します。

  3. 最終段階は バブリング段階と呼ばれます。これは、イベントが受信された、イベントが表示リストをバブルアップするとき です。オブジェクトの子によってディスパッチされたイベントをリッスンする方法を知る必要があるため、イベントバブリングはカスタムイベントをディスパッチするために非常に重要です。

イベントをディスパッチするとき、私は通常次の構文を使用します(これEvent.CHANGEは単なる一般的な例です)。

Object.dispatchEvent(new Event("CHANGE", true, false));

Object、ディスパッチ元のオブジェクトです。最初のパラメーターは、ディスパッチするイベントです。2番目はbubblesパラメータです。最後はcancelableプロパティです。Event.cancelableを介してイベントのデフォルトアクション(つまり、マウスクリック)を防ぐために使用されますEvent.preventDefault()

参照:

于 2011-02-13T00:57:13.023 に答える
0

代わりにSignalsを使用してください:P

https://github.com/robertpenner/as3-signals/wiki

いいえ、しかし実際には、それらは非常に使いやすく、理解しやすく、AS3ツールボックスへの素晴らしい追加です。

また、Rob Pennerの批評を読むことで、ネイティブAS3イベントがどのように機能するかについて多くを学ぶことができます(wikiページの一番下までスクロールしてください)

于 2011-02-13T04:34:00.170 に答える