Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Диспатч эвентов не создавая custom (http://www.flasher.ru/forum/showthread.php?t=150857)

gloomyBrain 19.02.2011 11:52

А, блин, точно =) Сейчас что-нибудь придумаю, мне очень нужен доллар =)

Psycho Tiger 19.02.2011 11:52

Аха, правда за cleptoman`ом. Ты повесил на приватное поле слушатель, а не на NotEventDispatcher :P

Разве что собственная реализация EventDispatcher, но это не катит )

cleptoman 19.02.2011 12:01

ха, Тигра, про закрытие метода dispatchEvent у LoaderInfo чо нарыл:

Код AS3:

private function init(e:Event = null):void         {
removeEventListener(Event.ADDED_TO_STAGE, init);
var ed:EventDispatcher = new EventDispatcher(this.loaderInfo);
this.loaderInfo.addEventListener(Event.COMPLETE, _onComplete);
//this.loaderInfo.dispatchEvent(new Event(Event.COMPLETE)); //  выдаст ошибку "Error #2118: Класс LoaderInfo не реализует этот метод."
ed.dispatchEvent(new Event(Event.COMPLETE)); // а так вполне себе реализует )))
}
 
private function _onComplete(e:Event):void {
trace(e.target); // [object LoaderInfo] гыгы)
}


Psycho Tiger 19.02.2011 12:09

Хах =)
Супер! Запости в блог (я серьезно).

in4core 19.02.2011 13:23

Читал читал и все равно ниче не понял. Показываю пример, того чего добиваюсь

Код AS3:

public class Ev extends EventDispatcher {
 
public static const CUSTOM = "custom";
 
public function Ev() {
}
public function show() {
 
this.dispatchEvent(new Event(CUSTOM));
 
}
}

Поехали в майн

Код AS3:

var ev:Ev = new Ev();
 
ev.addEventListener(Ev.CUSTOM , foo);
 
ev.show();
 
function foo(e:Event) {
  trace('ok');
}

Тоесть в моем примере слушателем является сам инстанс унаследованный от EventDispatcher. Вот именно такой код не работает. Можно ли его привести в действие ?

cleptoman 19.02.2011 13:25

Цитата:

Супер! Запости в блог (я серьезно).
отбой. все не так )

КорДум 19.02.2011 13:27

Потому что СНАЧАЛА вызывается конструктор, он диспатчит событие. ЗАТЕМ присоединяется слушатель, который слушает событие, которое ушло в небытие. Нужно сначала подписываться, а затем диспатчить.

in4core 19.02.2011 13:31

КорДум - без разницы, попробуй просто скопировать код и поиграться с ним )) если добьешься диспатча , то тему закроем. Я не добился хоть куда прописывай ты addListener

КорДум 19.02.2011 13:37

Код AS3:

package  {
        import flash.display.Sprite;
        import flash.events.Event;
 
        public class Main extends Sprite {
 
                public function Main():void {
                        var temp:Temp = new Temp();
                        temp.addEventListener("aaa", foo);
                        temp.dispatch();
                }
 
                private function foo(e:Event):void {
                        trace(e);
                        // [Event type="aaa" bubbles=false cancelable=false eventPhase=2]
                }
        }
}
 
package  {
        import flash.events.Event;
        import flash.events.EventDispatcher;
 
        public class Temp extends EventDispatcher {
 
                public function Temp() {
                        addEventListener("aaa", foo);
                        dispatchEvent(new Event("aaa"));
                }
 
                public function dispatch():void {
                        dispatchEvent(new Event("aaa"));
                }
 
                private function foo(e:Event):void {
                        trace(e);
                        // [Event type="aaa" bubbles=false cancelable=false eventPhase=2]
                }
        }
}

Вуаля!

Psycho Tiger 19.02.2011 13:43

А кому-это Вы в конструкторе событие посылаете? )


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

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