2011-08-22 10 views
0

カスタムコンポーネントがあり、子アイコンが含まれています。コンポーネント(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"); 
} 

答えて

0

UPD

が含まれているアプリケーションでは、

icon.addEventListener(MouseEvent.CLICK, iconClickHandler); 

    private function iconClickHandler(event:MouseEvent):void 
    { 
     trace ("Listener2"); 
     var customEvent:CustomEvent= new CustomEvent(CustomEvent.CUSTOM_EVENT, true, true); 
     dispatchEvent(customEvent) 
     trace ("Listener3"); 
    } 

あなたのコンポーネント機能012です。ここでは "listener2"をトレースしてカスタムイベントを送出します。原因事象のsyncronious自然に

は、CUSTOM_EVENTリスナーはがイベントを送出するリスナー関数を呼び出すに類似していることを意味し、すぐトリガされます。イベントはどこにも格納されず、遅延もありません。イベントへのリスナーは、同じスレッド内で同じコントロール・フローで即時に起動します。

CUSTOM_EVENTは、そのリスナーが起動して、派遣された - 私たちは、コンソールにcustomEventHandlerへの呼び出しと「LISTENER1」を持っています。

すべてのリスナーがトリガーされると、制御はiconClickHandlerに戻り、「listener3」はコンソールにトレースされます。私たちは、出力持っている理由です

:実際のiconClickHandlerで

listener2 
listener1 
listener3 
+0

はlistener2です。私を混乱させるのは、CUSTOM_EVENTリスナーは、CUSTOM_EVENTを送出するiconClickHandlerより早く発生します。 –

+0

すべてをもう一度チェックしてください。あなたのトレースステートメント(またはハンドラーの順序をチェックする方法)が正しく書かれていて、混乱を排除しています(つまり、次の 'dispatchEvent'の呼び出しの前に)。カスタムイベント名が他のイベント名と一致しません。あなたのリスナーとイベントには適切なバブリングとキャプションフラグがあります。 – moropus

+0

ええ、iconClickHandler関数では、ディパッチイベントはcustomEventでなければなりません。私はそれを変更しました。私はフラッシュpalyerのデバッグでハンドラの順序をチェックします。注文はcustomEventHandler、iconClickHandler –

関連する問題