Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   проблема с редиспатчем события (http://www.flasher.ru/forum/showthread.php?t=215585)

Appleman 22.05.2018 18:04

проблема с редиспатчем события
 
Друзья!

Уже не первый раз сталкиваюсь. Почему-то не получается диспетчеризировать полученное в приёмник событие. Вот код. Это Модель отлавливает события изменений статусов персонажей и пересылает их дальше для Вью.

Код AS3:

private function statusUpdateRedispatcher(e: ChStatusEvent) : void // Перенаправляет событие изменения статуса
                {
                        dispatchEvent(e);
                }

При запуске получаю исключение: [Fault] exception, information=TypeError: Error #1034: Type Coercion failed: cannot convert flash.events::Event@94ea629 to model.events.ChStatusEvent. Все типы совпадают.

При этом если пишу в теле

Код AS3:

dispatchEvent(new ChStatusEvent(e.status));

то всё прекрасно уходит.

WTF?

Zebestov 22.05.2018 19:20

1. При попытке редиспатчить не новое событие диспатчится клон события, а не оно само.
2. В ChStatusEvent ты очевидно не сделал override метода clone(), чтобы он создавал клон именно типа ChStatusEvent

Appleman 22.05.2018 21:13

Zebestov, не то чтобы забыл, а совершенно не имел понятия. Пошёл восполнять пробелы. Спасибо.

Кстати, что принято считать хорошей практикой программирования: переопределять clone() и редиспатчить напрямую или писать через new Event?

Добавлено через 10 минут
[Upd] С clone() разобрался, всё получилось.

Zebestov 22.05.2018 21:44

Цитата:

Сообщение от Appleman (Сообщение 1205343)
Кстати, что принято считать хорошей практикой программирования: переопределять clone() и редиспатчить напрямую или писать через new Event?

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

Любой же нативный диспатчер так или иначе пошлет новый Event, потому что будет вызван clone(), который возвращает новый экземпляр, просто св-ва type, bubbles и cancelable буду скопированы из оригинала. Так что писать все врукопашную — это излишество, если только тебе не нужно указать уникальные аргументы в конструкторе.


Часовой пояс GMT +4, время: 00:16.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.