0

カスタム コンポーネントがあり、子アイコンが含まれています。マウス クリック イベント リスナーをコンポーネント (クリック リスナー 1) とアイコン (クリック リスナー 2) の両方に追加すると、イベント ディスパッチ シーケンスはクリック リスナー 2、次にクリック リスナー 1 になります。私はそれを理解することができます。しかし、カスタム イベントをコンポーネント (リスナー 1) に追加し、マウス クリック イベントをアイコン (リスナー 2) に追加すると、アイコンがクリックされると、コンポーネントはカスタム イベントをディスパッチします。私のテストでは、イベント ディスパッチ シーケンスはリスナー 1、次にリスナー 2 です。event-bubbles ルールと一致しません。

私の意見では、カスタムイベントはリスナー2でディスパッチされ、リスナー1をトリガーします。イベント フロー シーケンスがリスナー 2、リスナー 1 ではないのはなぜですか?

コンポーネントで。

 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");  
    }

コンポーネントを含むアプリケーション内

 component.addEventListener(CustomEvent.CUSTOM_EVENT, customEventHandler);

private function customEventHandler(event:CustomEvent):void {
   trace ("Listener1");  
}
4

1 に答える 1

0

UPD

あなたが持っている:

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ディスパッチされると、最初のラッキー リスナーがトリガーされます。これはコンポーネントの関数iconClickHandlerです。ここでは、"listener2" をトレースし、カスタム イベントをディスパッチします。

イベントの同期的な性質により、CUSTOM_EVENTリスナーはすぐにトリガーされます。つまり、イベントのディスパッチは、リスナー関数の呼び出しに似ています。イベントはどこにも保存されず、遅延もありません。イベントのリスナーは、同じ制御フロー内、同じスレッド内でただちに起動します。

CUSTOM_EVENTがディスパッチされ、そのリスナーがトリガーされました -customEventHandlerコンソールで「listener1」への呼び出しがあります。

すべてのリスナーがトリガーされると、制御が に戻りiconClickHandler、「listener3」がコンソールにトレースされます。

そのため、次の出力が得られます。

listener2
listener1
listener3
于 2011-08-22T06:17:45.380 に答える