Как flash dispatchEvent действительно работает? - PullRequest
1 голос
/ 13 февраля 2011

В документах сказано, что EventDispatcher's dispatchEvent "... отправляет событие в поток событий".Фраза выглядит красиво и ничего не объясняет.

Скажем, у нас есть два слушателя, ожидающих событие "A" на объекте "a", так что мы должны ожидать при вызове:

a.dispatchEvent ("A")?

Будут ли оба слушателя вызываться немедленно, до возвращения из distpatchEvent?Или они будут поставлены в очередь в какой-то внутренней очереди Flash Player и будут обрабатываться путем ввода следующего кадра?Можем ли мы рассчитывать на какое-то определенное поведение флэш-плеера здесь или поведение не определено?Как читать «отправляет событие в поток событий»?Этот вопрос важен, поскольку на практике он влияет на поток управления кода.

Ответы [ 2 ]

2 голосов
/ 13 февраля 2011

Все зависит от вашей иерархии списка отображения.

Структура событий Flash основана на внутренней модели событий .

  1. Этап будет первым объектом уведомить, а затем событие будет стекают вниз по списку пока оно достигает своей цели. Эта фаза называется фаза захвата . Чтобы включить его, установите useCapture в true на слушателе событий. Сделать примечание что это бессмысленно делать, если только объект прослушивания является родителем объект, нацеленный на событие. это называется событие перехвата .

  2. Следующая фаза - цель фаза . Это поведение наиболее общеизвестный с событиями. целевой экранный объект (тот, который есть слушатель для события) будет получить событие и выполнить код в слушателе.

  3. Последний этап называется Фаза барботирования . Это когда событие всплывает список отображения после событие получено. Бублинг событий очень важен для отправка пользовательских событий, так как вы нужно уметь слушать события, отправленные объектом дети.

При отправке события я обычно использую этот синтаксис (Event.CHANGE - это просто общий пример):

Object.dispatchEvent(new Event("CHANGE", true, false));

Object - это объект, с которого вы отправляете. Первый параметр - это событие, которое вы отправляете. Второй параметр bubbles. Финал - это свойство cancelable. Event.cancelable используется для предотвращения действия события по умолчанию (IE: щелчок мыши) с помощью Event.preventDefault().

Ссылка:

0 голосов
/ 13 февраля 2011

Просто используйте вместо этого сигналы: P

https://github.com/robertpenner/as3-signals/wiki

Нет, но на самом деле, они очень просты в использовании и понимании, отличное дополнение к набору инструментов AS3.

Вы также можете многое узнать о том, как работают нативные события AS3, прочитав критические замечания Роба Пеннера (прокрутите вниз до нижней части вики-страницы)

...