カスタムコンポーネントがあり、子アイコンが含まれています。コンポーネント(click-listener1)とアイコン(click-listener2)の両方にマウスクリックイベントリスナーを追加すると、イベントディスパッチシーケンスはclick-listener2、次にclick-listener1です。私はそれを理解することができます。しかし、カスタムイベントをコンポーネント(listener1)に追加し、マウスクリックイベントをアイコン(listener2)に追加すると、アイコンがクリックされると、コンポーネントはカスタムイベントを送出します。私のテストでは、イベントディスパッチされたシーケンスはlistener1、次にlistener2です。イベントバブルルールと一致しません。組み込みのイベントとカスタムイベントのフレックスイベントフロー
私の意見では、カスタムイベントは、listener2で送出され、listener1がトリガーされます。なぜイベントフローシーケンスがlistener2、listener1でないのですか?
コンポーネント内。 -
private function iconClickHandler(event:MouseEvent):void
{
trace("listener2");
var customEvent:CustomEvent= new CustomEvent(CustomEvent.CUSTOM_EVENT, true, true);
dispatchEvent(customEvent);
trace("listener3");
}
private function customEventHandler(event:CustomEvent):void
{
trace("listener1");
}
MouseEvent.MOUSE_CLICK
がディスパッチされると、それは最初の幸運のリスナーをトリガー:あなたが持っているコンポーネント
component.addEventListener(CustomEvent.CUSTOM_EVENT, customEventHandler);
private function customEventHandler(event:CustomEvent):void {
trace ("Listener1");
}
はlistener2です。私を混乱させるのは、CUSTOM_EVENTリスナーは、CUSTOM_EVENTを送出するiconClickHandlerより早く発生します。 –
すべてをもう一度チェックしてください。あなたのトレースステートメント(またはハンドラーの順序をチェックする方法)が正しく書かれていて、混乱を排除しています(つまり、次の 'dispatchEvent'の呼び出しの前に)。カスタムイベント名が他のイベント名と一致しません。あなたのリスナーとイベントには適切なバブリングとキャプションフラグがあります。 – moropus
ええ、iconClickHandler関数では、ディパッチイベントはcustomEventでなければなりません。私はそれを変更しました。私はフラッシュpalyerのデバッグでハンドラの順序をチェックします。注文はcustomEventHandler、iconClickHandler –