Форум 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=212750)

RAlfDog 21.04.2016 12:18

Правильное клонирование кастомных событий
 
Всем доброго дня!

Не могу понять на каком этапе происходит клонирование моего пользовательского события, которое после этого превращается в простой объект класса Event из моего ApplicationEvent.

Есть объект Application, который рассылает события об активации и деактивации:
Код AS3:

this.dispatchEvent(new ApplicationEvent(ApplicationEvent.ACTIVATE_EVENT, this));
// ......
this.dispatchEvent(new ApplicationEvent(ApplicationEvent.DEACTIVATE_EVENT, this));

Метод клонивания в самом ApplicationEvent:
Код AS3:

override public function clone():Event
{
  if (this.disposed)
      throw new IllegalOperationError("Can't clone disposed model event!");
 
  return new ApplicationEvent(this.type, this.appModel);
}

Назначение прослушивания:
Код AS3:

Application.instance.addEventListener(ApplicationEvent.ACTIVATE_EVENT, onActivate);
Application.instance.addEventListener(ApplicationEvent.DEACTIVATE_EVENT, onDeactivate);

Прослушиватели:
Код AS3:

static private function onActivate(e:ApplicationEvent):void
{
  // ......
}
static private function onDeactivate(e:ApplicationEvent):void
{
  // ......
}

При возникновении события и поступления его в прослушиватель пишет "Не могу преобразовать flash.events.Event в ApplicationEvent"!

Если поменять
Код AS3:

static private function onActivate(e:Event):void
{
  // ......
}
static private function onDeactivate(e:Event):void
{
  // ......
}

то, конечно, всё прекрасно - но это не очень красивый выход :(

Вообще, при каких условиях flash занимается самостоятельным клонированием события?

GBee 21.04.2016 14:27

Цитата:

после этого превращается в простой объект класса Event из моего ApplicationEvent
Цитата:

override public function clone():Event
Он не превращается, все равно прилетает ApplicationEvent.

Все остальное в хелпе
Цитата:

класс EventDispatcher вызывает его автоматически при повторной отправке события, то есть, при вызове dispatchEvent(event) из обработчика события event.

alatar 21.04.2016 14:49

Что содержится в константах ACTIVATE_EVENT и DEACTIVATE_EVENT?

RAlfDog 21.04.2016 14:51

Цитата:

Он не превращается, все равно прилетает ApplicationEvent.
Да, я знаю что так должно быть. Но у меня где-то получается так, что прилетает обычные Event, который не интерпретируется как мой кастомный эвент.
Подумал может я что-то не знаю про клонирование, может где-то super.clone() или что-то подобное происходит.

Добавлено через 6 минут
Цитата:

Сообщение от alatar (Сообщение 1193479)
Что содержится в константах ACTIVATE_EVENT и DEACTIVATE_EVENT?

А, да точно, спасибо! Не подумал об этом, содержится "activate" и "deactivate", заменил на "activateEvent" и "deactivateEvent".
Но всё равно не понятно, даже если так. Все объекты, наследуемые от flash.events.EventDispatcher, самостоятельно рассылают flash.events.Event-события "activate" и "deactivate?

alatar 21.04.2016 15:16

Да и об этом прямо написано в документации.
В итоге вы получаете не свое событие, а страндартное, так как слушатели регистрируются по строке (строковому типу события).

RAlfDog 21.04.2016 15:18

Ясно, спасибо!


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

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