Stage
の子である Main
にイベントをディスパッチしています。 Stage
にイベントを送出する場合は、次のようにします。
stage.dispatchEvent(new Event("pOver"));
今、あなたが「子供の場合は、私のイベントハンドラがまだ起動しているはずです」と疑問に思うかもしれません。
はい、いいえ。
イベントライフサイクルの簡単な図を見てみましょう:

まず、ディスパッチしているイベントは、イベント
のバブリングではありません。 イベントを調べる
コンストラクタの場合、そのシグネチャは次のようになります。
public function Event(type:String, bubbles:Boolean = false, cancelable:Boolean = false)
2番目の引数はデフォルトで false
です。つまり、このイベントはイベントライフサイクルのバブリング部分を実行しません。
次に、イベントのライフサイクルのバブル側にイベントディスパッチャを接続しました。 .addEventListener()
のようになります。
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
3番目の引数に注目してください。これはデフォルトで false
です。これは、イベントの「バブリング」側に取り付けることを意味します。
これは、このイベントが対象の要素、つまり Main
のインスタンスに到達してから停止し、他の場所には移動していないことを意味します。
TL;DR: So what does that all mean?
したがって、イベントハンドラをトリガするには、イベントが送出される場所を変更しない場合は、トリガするイベントを変更する必要があります。
this.dispatchEvent(new Event("pOver", true)); //this event will bubble
イベントハンドラは子イベントであるため、このイベントによってトリガされます。
逆に、バブルではないイベントもイベントライフサイクルのキャプチャ側で進歩すると思いますので、イベントリスナーを変更してイベントのその側にも付けることができます。
stage.addEventListener("pOver", rake, true);//attach to a capturing side
そのイベントはバブリングしていないとマークされていても、キャプチャフェーズを介して常にそのイベントが流れると私は考える 。しかし、私はそれを間違える可能性があります 。 「非バブリング」イベントがキャプチャフェーズとバブリングフェーズの両方をスキップし、ターゲットイベントフェーズをトリガするだけで、今すぐ確認する時間がないことを覚えていません。
編集
だから、 wonderflのクイックテストを書きました:
package {
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
private var debug:TextField;
public function FlashTest() {
stage.addEventListener("Foo", bubbleFooHandler);
stage.addEventListener("Foo", captureFooHandler, true);
trace("Ready");
trace("---------------");
trace("Trying a non-bubbling event");
this.dispatchEvent(new Event("Foo"));
trace("---------------");
trace("Trying a bubbling event");
this.dispatchEvent(new Event("Foo", true));
}
private function captureFooHandler(e:Event):void {
trace("Triggered \"Foo\" from capturing phase\n");
}
private function bubbleFooHandler(e:Event):void {
trace("Triggered \"Foo\" from bubbling phase");
}
}
}
これからの出力は
Ready
---------------
Trying a non-bubbling event
Triggered "Foo" from capturing phase
---------------
Trying a bubbling event
Triggered "Foo" from capturing phase
Triggered "Foo" from bubbling phase
イベントはキャプチャフェーズで常に進行することに注意してください。ただし、「バブリングイベント」としてマークされていない場合は、前を参照して、イベントのターゲットに到着したときに停止するツリー(イベントが送出された EventDispatcher
)に降下します。
一方、バブルイベントは、ツリーを回って上します。
うまくいけば、これは物事をクリアする。