Захватите событие в промежуточном обработчике, удерживайте его в свойстве, затем отправьте его позже и все еще получите .target? - PullRequest
1 голос
/ 22 июля 2010

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

Сейчас я стараюсь не использовать пользовательское событие, так как оно вызывает у меня огромное количество изжоги при отправке его с загруженного SWF-файла.

Вот код (который не работает), который, надеюсь, будетпомогите понять, что я пытаюсь сделать:

package
{
    import fl.transitions.easing.Regular;
    import fl.transitions.Tween;
    import fl.transitions.TweenEvent;
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLRequest;

    public class Document extends MovieClip
    {
        protected var _event:Event;

        public function Document():void
        {
            initLoader();
        }

        protected function initLoader():void
        {
            var loader:URLLoader = new URLLoader();
            loader.load(new URLRequest('some_url.xml'));
            loader.addEventListener(Event.COMPLETE, intermediaryHandler);
        }

        protected function intermediaryHandler(event:Event):void
        {
            _event = event;
            doSomeAction();
        }

        protected function doSomeAction():void
        {
            var tween:Tween = new Tween(someObject, "alpha", Regular.easeIn, 0, 1, 5);
            tween.addEventListener(TweenEvent.MOTION_FINISH, tweenHandler);
        }

        protected function tweenHandler(event:TweenEvent):void
        {
            /*
             * Imagine some object is listening to this class for Event.COMPLETE.
             * I would like to retrieve the event.target that I could have retrieved
             * in the `intermediaryHandler()` method, in the listener to the following
             * event being dispatched:
             */
            dispatchEvent(_event);
        }
    }
}

Я могу сохранить событие в переменной класса, а затем получить к нему доступ позже, но вишня на глазури могла бы получить его отсобытие в моем примере tweenHandler().

Edit Ну, это не выглядит возможным (спасибо @bhups за объяснение).В настоящее время я сохраняю извлеченное событие в свойстве _event, а затем получаю его позже, когда оно мне понадобится.Кажется, это работает, но не прекрасно.

1 Ответ

1 голос
/ 22 июля 2010

Боюсь, это невозможно. Всякий раз, когда вы повторно отправляете событие, Flash Runtime создает его клон и отправляет его в поток событий. И как только событие переходит в поток событий, его свойства не могут быть изменены. target и currentTarget являются read-only свойствами объекта Event. Таким образом, без использования CustomEvent невозможно достичь того, что вы пытаетесь сделать.
С какой именно проблемой вы сталкиваетесь при использовании Custom Event?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...