2009-02-09 3 views
12

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

ответ

19

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

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

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

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

Смежные вопросы