Распространение пользовательского события на Родителя - PullRequest
0 голосов
/ 03 октября 2010

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

TRIED:

this.b.addEventHandler(GameLaunchEvent.GAME_LAUNCH_EVENT, this.eventHandler)


package com.thom.events 
{
    import flash.display.MovieClip;
    import flash.events.Event;

    /**
     * ...
     * @author 
     */
    public class LaunchEventAbstract extends Event
    {
        public var parent:MovieClip;
        public function LaunchEventAbstract(type:String, parent:MovieClip = null) 
        {
            super(type, true);  
            this.parent = parent;
        }   
    }
}

package com.thom.events 
{
    import flash.display.MovieClip;
    import flash.events.Event;

    /**
     * ...
     * @author
     */
    public class GameLaunchEvent extends LaunchEventAbstract 
    {
        public static const GAME_LAUNCH_EVENT:String = "GameLaunchEvent";
        public function GameLaunchEvent(parent:MovieClip = null) {
            trace("GameLaunchEvent");
            super(GAME_LAUNCH_EVENT, parent);
        }
    }

}

//example code
package {
   import com.thom.events.*;
   public class A extends MovieClip{
         public var b:B;
         public function A(){
              addEventListener(GameLaunchEvent.GAME_LAUNCH_EVENT, eventHandler);
              this.b = new B();
              addChild(b);
         }
         public function eventHandler(e:GameLaunchEvent){
             trace("Success");
         }
    }
}
package {
    import com.thom.events.*;
    public class B extends MovieClip{
         public function B() {
              dispatchEvent(new GameLaunchEvent(this));
         }
     }
}

Ответы [ 2 ]

3 голосов
/ 04 октября 2010

Event Bubbling - это то, что вы хотите:

Parent:
childClip.addEventListener('CUSTOM_EVENT', handler);

Child:
this.dispatchEvent(new Event('CUSTOM_EVENT', true, true));

Это распространит его вверх по списку отображения.Проблема с непосредственным прослушиванием загрузчика заключается в том, что он выглядит следующим образом:

Loader
  - Content

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

0 голосов
/ 03 октября 2010

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


package 
{
   import flash.display.MovieClip;
   import flash.events.Event;
   import flash.events.EventDispatcher;

   public class A extends MovieClip
   {
         public var b:B;
         private var _dispatcher:EventDispatcher = new EventDispatcher();

         public function A()
         {
         _dispatcher.addEventListener('test', eventHandler);   
             this.b = new B(_dispatcher);
         }

         public function eventHandler(e:Event):void
         {
             trace("Success");
         }
    }
}


package 
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.EventDispatcher;

    public class B extends MovieClip
    {
        private var _dispatcher:EventDispatcher;

        public function B(dispatcher:EventDispatcher) 
        {
            this._dispatcher = dispatcher;
            _dispatcher.dispatchEvent(new Event('test'));
        }

    }
}
...