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')" />;