Ok I've spent a little bit of time looking into both the flash 
EventDispatcher and Event.   To get a good picture of how they interact and 
target the DisplayObjects.  They have quite a few missing properties and 
communicate without using public methods.

    Turns out they just execute code inside the player itself natively [1].  So 
my observations show the missing properties/methods are actually controlled in 
the player which explains a few things.  Giving a small example from the 
flash.events.Event.


    When using the preventDefault on an event and be able to check if it's 
prevented...

public native function preventDefault():void;
public native function isDefaultPrevented():Boolean;


    However simple things like being able to see if propogation has been 
stopped, are not present but still being used internally to the player...

public native function stopPropagation():void;
or
public native function stopImmediatePropagation():void;


    Since the method dispatching the events is in the player and has access to 
the properties that aren't in the event or eventdispatcher.

private native function dispatchEventFunction(event:Event):Boolean;


    What this means is your two choices for coming up with a more controllable 
EventDispatcher.

A.  Override the EventDispatcher  methods and run a parallel set of methods and 
properties while still calling  the existing EventDispatcher parent (super).  
It works well, but seems inefficient to be doing everything twice (overridden 
and super both doing looping operations).  Less inefficient if using a 
Dictionary or Map to store the event handlers.

B.  Create a new FlexEventDispatcher / IFlexEventDispatcher and modify 
something like the Flex Events and FlexSprite to work with the new dispatcher.  
  Which seems like an uphill battle to do lots of little overrides on the 
existing base components we have access to.  It would only have a functional 
benefit if a set of components would start using it as part of its base.


    Looks like Adobe has a tight grasp on this.   Anything else will always be 
a work around.  The only long term way around this type of stuff would be to 
change all the base components and start a new component namespace that starts 
using a base of all Apache Flex made classes (no small task in itself).


[1] 
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/statements.html#native


-Mark

Reply via email to