Пользовательское событие не достигает звонящего - PullRequest
0 голосов
/ 23 сентября 2011

Я создал пользовательское событие, которое должно запускаться при выполнении определенной функции в классе. Я слушаю это событие из своего основного сценария, обрамляя одну из моих временных рамок. Посмотрите код, чтобы лучше понять мой вопрос.

My CustomEvents.as

package  {
    import flash.events.Event;  
        public class CustomEvents extends Event {

            public static const PAGE_EMPTY:String = "Page Empty";

            public function CustomEvents(type:String) {
                super(type);
                trace("hello from within the event class!");
            }
        }   
}

Функция в FRONT_PAGE.as, которая отправляет событие

public function exitPage(){

        dispatchEvent(new CustomEvents(CustomEvents.PAGE_EMPTY));

        var mainLinkExitMove:Tween = new Tween(mainLink, "y", Strong.easeOut, mainLink.y , -150, 3, true);          
        var gridExitMove:Tween = new Tween(grid, "y", Strong.easeOut, grid.y , -150, 3, true);

}

И, наконец, код, который вызывает вышеуказанную функцию и прослушивает возвращенное событие. frontPage - это объект класса FRONT_PAGE.as, ранее объявленный в коде.

function gotoSubPage(){
    frontPage.exitPage();

    frontPage.addEventListener(CustomEvents.PAGE_EMPTY, ef_FrontPageFinishedExiting);
    function ef_FrontPageFinishedExiting(event:CustomEvents){
        trace("Event has been caught");
    }
} 

Я знаю, что достигаю конструктора CustomEvents, так как трассировка внутри него печатается. Проблема в том, что событие не достигает функции вызывающей стороны?

Мне не удалось найти хороших примеров того, как использовать простые пользовательские события, поэтому я думаю, что так и должно быть. Что я делаю не так?

1 Ответ

0 голосов
/ 23 сентября 2011

Похоже, что это не работает, потому что вы слушаете событие после вызова метода, который отправляет событие, корзина перед лошадью:)

Вы также объявляете ef_FrontPageFinishedExiting в gotoSubPage,он должен быть за пределами этого метода в классе.

Попробуйте вместо этого:

function gotoSubPage() {
    frontPage.addEventListener(CustomEvents.PAGE_EMPTY, ef_FrontPageFinishedExiting);
    frontPage.exitPage();   
}

function ef_FrontPageFinishedExiting(event:CustomEvents) {
    trace("Event has been caught");
}

Также, когда у вас есть пользовательское событие, неплохо было бы также переопределить метод клона:

package
{
    import flash.events.Event;

    public class MyEvent extends Event
    {
        public static const SOMETHING_HAPPENED:String = "somethingHappened";

        public function MyEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);
        }

        override public function clone():Event
        {
            return new MyEvent( type, bubbles, cancelable );
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...