Повторная отправка события в FLEX - PullRequest
12 голосов
/ 09 февраля 2009

В приложении FLEX я пытаюсь повторно отправить пользовательское событие. То есть component1 выполняет dispatchEvnet (событие), component2 регистрирует обработчик для события, единственной функцией обработчика является, опять же, диспетчеризация (событие). Наконец, component3 прослушивает событие, выходящее из component2. То, что я пытаюсь сделать, похоже на концепцию «перебрасывания» исключений (и по тем же причинам). Разница в том, что повторная диспетчеризация не работает в AS3 (Flash 10). В IE ничего не происходит, а в FF3 есть исключение, говорящее о том, что приведение типа не выполнено при попытке привести тип события к моему CustomEvent при вызове обработчика в component3. Отслеживание кода в отладчике показывает, что к тому времени, когда вызывается component3, событие, действительно, является общим, со всеми потерянными пользовательскими вещами. Это должно быть так?

Ответы [ 2 ]

19 голосов
/ 09 февраля 2009

Проблема, с которой вы столкнулись, вызвана тем, что вы не переопределили событие clone () в своем пользовательском событии.

Когда события пересылаются, они клонируются и изменяются. Если вы не переопределите clone (), вы получите базовую реализацию clone (), которая возвращает событие. Поскольку событие не может быть преобразовано в пользовательский тип события, возникает ошибка времени выполнения.

Из документации:

При создании собственного пользовательского класса Event вы должны переопределить унаследованный метод Event.clone (), чтобы он дублировал свойства вашего пользовательского класса. Если вы не установите все свойства, которые добавляете в свой подкласс событий, эти свойства не будут иметь правильных значений, когда слушатели обрабатывают событие redispatched.

0 голосов
/ 03 мая 2009
...