Sunday, August 19, 2012

Tuesday, July 6, 2010

OverLoading in Flex/Actionscript3.0 Example.


import flash.utils.Dictionary; 
 import flash.events.Event; 
public var targetMap: Dictionary = new Dictionary(); 
public var targetEventMap: Dictionary; 

private function addEvent(event:Event, listener:Function, ...args ) : void { 
 targetEventMap = targetMap[event.target] == undefined ? new Dictionary : targetMap[event.target]; 
targetEventMap[event.type] = { listener:listener, args:args }; 
targetMap[event.target] = targetEventMap; 
event.target.addEventListener( event.type, onEvent,false,0,true); 


private function onEvent ( e:Event ) : void { 
targetEventMap = targetMap[e.currentTarget]; 

if (targetEventMap[e.type].args[0] is Event) 
targetEventMap[e.type].args.shift(); 
 targetEventMap[e.type].args.unshift( e ); 
 targetEventMap[e.type].listener.apply( e.currentTarget, targetEventMap[e.type].args ); 
}

private function handlerFn(e:MouseEvent,...args) : void { 
var tempObject:Object = new Object();
 var functionName:String = 'fnc' + (args.length).toString();
 tempObject.functionName = new Function() tempObject.functionName.call(e.target.parent['fnOverLoaded'].apply(this, args)) 



private function fnOverLoaded(...args):void { 
mx.controls.Alert.show( args.toString(),'arguments '+(args.length).toString()) 


private function fnCreateOverLoaded(...args):void { 
var event:Event = args[0] as Event 
 if(targetMap[event.target] == undefined ){ 
this['addEvent'].apply(this,args) event.target.dispatchEvent(event) 
 } 


public function removeEvent( target:IEventDispatcher, type:String ) : void {
//removeEvent(btn1,MouseEvent.CLICK) 
if(targetMap[target]!=undefined){ 
var targetEventMap : Dictionary = targetMap[target]; 
delete targetEventMap[type]; target.removeEventListener( type, onEvent ); 
 }
 }


label='with4Args' click="fnCreateOverLoaded(event, handlerFn,'arg1', 'arg2','arg3', 'arg4')" />;