Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Непонятки с dispatchEvent и useCapture (http://www.flasher.ru/forum/showthread.php?t=171765)

Universe 23.11.2011 16:25

Непонятки с dispatchEvent и useCapture
 
Пытаюсь проделать банальную весчь:

Код AS3:

this.addEventListener("SHOW_HELP", showHelpHendler,true,0,true);
this.dispatchEvent(new Event("SHOW_HELP"));
 
private function showHelpHendler(e:Event):void
{
        trace("Show Help " + e.target);
}

почему функция перестаёт вызываться, если я включаю useCapture? Без useCapture работает.

gloomyBrain 23.11.2011 16:40

capture фаза существует только для дисплейных объектов. Допустим у нас есть спрайт, в нем еще один, а в нем мувик. И мы кликаем по мувику. Сначала идет фаза захвата - событие спускается от спрайта к еще одному. Потом target фаза - это когда событие попало в мувик. Потом bubbling фаза, когда событие вновь начинает подниматься от мувика к вложенному спрайту и затем к внешнему.
Когда Вы ручками диспатчите событие - оно сразу начинает с таргет-фазы

Universe 23.11.2011 17:08

почему тогда если я делаю подписку не на this, а на stage - всё работает
Код AS3:

this.addEventListener("SHOW_HELP", showHelpHendler,true,0,true);
this.dispatchEvent(new Event("SHOW_HELP"));
 
private function showHelpHendler(e:Event):void
{
        trace("Show Help " + e.target);
}

и какой вообще выход, использовать баблинг?
Код AS3:

this.dispatchEvent(new Event("SHOW_HELP", true));


gloomyBrain 23.11.2011 17:50

Так с этого и нужно начинать - какого эффекта нужно добиться?

Universe 23.11.2011 17:58

есть функция вызова всплывающего окна. Окно всегда вызывается в главном классе, "просят" же о том чтобы вызвать это окно кто попало, по сути это может сделать любое другое окно приложения. Задача состоит в том чтобы главный класс услышал молебный диспатч каждого и вызвал функцию showHelp, и что важно с учётом того что он сам у себя может попросить это окно, т.е this.dispatchEvent....:)

Добавлено через 1 минуту
последнее конечно бред, но всё таки, интересно почему именно диспатч в самом себе не даёт желаемого эффекта

Genzo 23.11.2011 18:02

А не проще сделать в основном классе статическую функцию, и обращаться к ней? или сделать главный класс Singleton?

gloomyBrain 23.11.2011 18:03

Ну исходя из предлогаемых вариантов - тут нужен bubbling. Так как нам нужно от внуков достучаться до дедушки. То есть подняться вверх. Фаза захвата - это как раз процесс опускания события вниз, и оно тут незачем.

Universe 23.11.2011 18:49

но суть то не меняется...какая вообще разница, чисто практически, на каком этапе ловить событие, на этапе погружения или на этапе всплытия?

gloomyBrain 23.11.2011 19:08

При всплытии событие клонируется. При всплытии его уже обработали все ктохотел это сделать на этапе погружения

fljot 24.11.2011 03:13

Цитата:

Сообщение от Universe (Сообщение 1047791)
почему функция перестаёт вызываться, если я включаю useCapture? Без useCapture работает.

Цитата:

useCapture:Boolean (default = false) — Determines whether the listener works in the capture phase or the target and bubbling phases. If useCapture is set to true, the listener processes the event only during the capture phase and not in the target or bubbling phase. If useCapture is false, the listener processes the event only during the target or bubbling phase.
Т.е. если ваш this это элемент display list'а и он выбрасывает событие, то это событие на нём будет в фазе EventPhase.AT_TARGET, которая не ловится через useCapture


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

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