|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Диспетчерезация события через EventDispatcher target
Есть иерархия вложенности спрайтов: a.b.c. Создаем экземпляр EventDispatcher и в target передаем спрайт c. Это получается объект, который будет получать события?
Объясните пожалуйста, почему, когда диспатчим событие, спрайт c его не получает? import flash.events.EventDispatcher; import flash.display.Sprite; import flash.events.Event; var a:Sprite = new Sprite(); var b:Sprite = new Sprite(); var c:Sprite = new Sprite(); addChild(a); a.addChild(b); b.addChild(c); var d:EventDispatcher = new EventDispatcher(c); a.addEventListener('customEvent', onA); b.addEventListener('customEvent', onB); c.addEventListener('customEvent', onC); d.dispatchEvent(new Event('customEvent', true)); function onA(e:Event):void{ trace('Event A'); } function onB(e:Event):void{ trace('Event B'); } function onC(e:Event):void{ trace('Event C'); } Цитата:
__________________
Дети не должны знать о своих родителях |
|
|||||
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
Потому что c диспатчит эвент. Конструктор принимает объект который имплементит IEventDispatcher, но неизвестно если наследует (не наследует) у EventDispatcher (в данном случае в этом конструкторе нет смысла т.к. спрайт наследует). Я так понял из хелпа и пары туманных объяснений
Т.е. этот инстанс EventDispatcher цепляется (композиция) к c, в итоге именно c диспатчит эвент. Поправьте если неправ, тоже интересно Да, e.target выдаёт [object Sprite], и это именно с (прицепил name, выдаёт его имя). |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Меня больше удивляет сам факт того, что событие таки всплыло. Возможно это просто связано с тем, что target является DisplayObject-ом и поэтому EventDispatcher выполнил бабблинг. Ну а то, что от самого «с» не пришло событие, можно объяснить лишь тем, что у них с «d» не общие списки хендлеров (в силу того, что у него своя реализация IEventDispatcher и он не является реализатором «d» вообще).
|
|
|||||
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
Мне тяжело понять где это может пригодиться.
Ведь чтобы была польза с этого эвента, чтоб он мог всплывать, target должен быть на сцене - наследовать у DisplayObject'а, который уже наследует у EventDispatcher'a, а значит мы просто будем привязывать EventDispatcher к другому EventDispatcher'у , и тут я смысла не вижу. Просто пытаюсь собрать пример где это может понадобиться, и не получается. А почему событие не должно всплывать? Его же c диспатчит. |
|
|||||
AlexLucas,
И не нужно. Использовать конструктор и передавать в target имеет смысл только объекты, реализующие IE. Как написано в справке адоба, чтобы объект тоже мог получать события.
__________________
Дети не должны знать о своих родителях |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Ну, применение странное, безусловно.
|
Часовой пояс GMT +4, время: 14:05. |
|
« Предыдущая тема | Следующая тема » |
|
|