Потоки событий Flex для встроенных и пользовательских событий
У меня есть собственный компонент, и он содержит дочерний значок. Если я добавляю прослушиватель событий щелчка мыши как к компоненту (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 ответ
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