Потоки событий Flex для встроенных и пользовательских событий - PullRequest
0 голосов
/ 22 августа 2011

У меня есть собственный компонент, и он содержит дочерний значок. Если я добавлю прослушиватель событий щелчка мышью и к компоненту (click-listener1), и к значку (click-listener2), последовательность отправленных событий будет click-listener2, затем click-listener1. Я могу это понять. Но если я добавлю пользовательское событие в компонент (listener1) и событие щелчка мыши на иконку (listener2), при нажатии на значок компонент отправит пользовательское событие. В моем тесте последовательность отправленного события - listener1, затем listener2. Это не соответствует правилу пузырьков событий.

По моему мнению, пользовательское событие отправляется в listener2, что вызывает listener1. Почему последовательность потока событий не слушатель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");  
}

1 Ответ

0 голосов
/ 22 августа 2011

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
...