Подтвердить что ты не робот

Повторная отправка события в FLEX

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

4b9b3361

Ответ 1

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

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

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

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