通过代理传参数

通过代理传参数

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;		
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值