프록시를 통해 매개변수 전송

3712 단어 F#Flash
프록시를 통해 매개변수 전송
package com.xlands.utils {
	import flash.display.InteractiveObject;
	import flash.utils.Dictionary;

	public class Delegate {
		/**
		 *    createListener       
		 */
		private static var funDictionary:Dictionary = new Dictionary;

		/**
		 *        
		 */
		public static function create(method:Function, ... additionalArgs):Function {
			return createWithArgs(method, additionalArgs);
		}

		/**
		 * @desc           (2)
		 * @detail        ,               ,                  
		 *
		 * @usage
		 * xxx.addEventListener(Event.xxx,Delegate.createListener(funNeedAddParam,xxx,1);
		 *
		 *     :(  )
		 * xxx.removeEventListener(Event.xxx,Delegate.getListener(funNeedAddParam,xxx);
		 * Delegate.delFunction(funNeedAddParam,xxx);<------      ...         funDictionary   
		 *
		 * by haosheng.lin
		 * @param method         
		 * @param additionalArgs        
		 * @return          
		 *
		 */
		public static function createListener(method:Function, $listenerCurrentTarget:InteractiveObject, ... additionalArgs):Function {
			return createWithArgs(method, additionalArgs, true, $listenerCurrentTarget);
		}

		private static function createWithArgs(func:Function, args:*, needRemove:Boolean = false, $listenerCurrentTarget:InteractiveObject = null):Function {
			var f:Function = function():* {
					var func0:Function = arguments.callee.func;
					var parameters:Array = arguments.concat(args);
					return func0.apply(null, parameters);
				};

			f["func"] = func;

			if (needRemove) {
				var funDic:Dictionary = null;
				if ($listenerCurrentTarget in funDictionary) {
					funDic = funDictionary[$listenerCurrentTarget] as Dictionary;
				} else {
					funDic = new Dictionary();
					funDictionary[$listenerCurrentTarget] = funDic;
				}
				funDic[func] = f;
			}
			return f;
		}

		public static function getListener(fun:Function, $listenerCurrentTarget:InteractiveObject):Function {
			var listener:Function = null;
			if ($listenerCurrentTarget in funDictionary) {
				var funDic:Dictionary = funDictionary[$listenerCurrentTarget] as Dictionary;
				if (fun in funDic) {
					listener = funDic[fun] as Function;
				} else {
					//throw new Error("        ,     createListener()     ,       delFun()    ")
					listener = null;
				}

			} else {
				//throw new Error("        createListener()     ,       delFun()    ")
				listener = null;
			}
			return listener;
		}

		public static function delListener($fun:Function, $listenerCurrentTarget:InteractiveObject):void {
			if ($listenerCurrentTarget in funDictionary) {
				var funDic:Dictionary = null;
				funDic = funDictionary[$listenerCurrentTarget] as Dictionary;
				delete funDic[$fun];
				if (DictionaryUtil.isLengthZero(funDic) == true) {
					delete funDictionary[$listenerCurrentTarget]
				}
			}
		}

	}
}

 
사용법
var action:XlandsHttpAction = new XlandsHttpAction();
action.addEventListener(HttpEvent.ON_HTTP_SUCCESS, Delegate.create(onRegisterSuccess, b));
action.actByMain();

private function onRegisterSuccess(b:Boolean):void{
	this.registered = b;		
}

 

좋은 웹페이지 즐겨찾기