`

通过代理传参数

阅读更多

通过代理传参数

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

 

 

分享到:
评论

相关推荐

    springboot websocket集群(stomp协议)连接时候传递参数

    主要介绍了springboot websocket集群(stomp协议)连接时候传递参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Nginx+lua通过url传参的方式实现动态代理

    需求大致如下:通过url传参的方式,让Nginx代理到不同的服务器 浏览器输入:http://127.0.0.1/remote?port=8081被代理到:http://192.168.108.2:8081

    lotus domino java代理_获取传递值json

    lotus domino java代理_获取传递值json

    使as3事件支持参数的代理类

    使as3事件支持参数的代理类,通常as3的事件只能调一个方法,不能传参数,如: addEventListener(MouseEvent.MOUSE_DOWN, mouseDowV);

    pb调用webservice提示参数为Null的解决办法

    其他开发工具调用都没问题,pb调用就提示参数为null,经过多方努力比较,此方法确实可行。

    VB.Net-C#多线程Thread-代理委托delegate编程

    最近收集的VB.Net-C#多线程Thread-代理委托delegate编程。文章列表: c#.net多线程同步.txt C#WebBrowser页面与WinForm交互技巧一.txt C#多线程编程-多细全.txt C#多线程编程简单实例.txt C#多线程窗体控件安全访问....

    Activity代理框架AyoActivityNoManifest.zip

    目的在于在Activity之间传递参数时考虑序列化问题,适用于进程内通信提供了一个轻量级的OnActivityResult机制(OnResultCallback,使用方式基本和OnActivity不一样)状态栏一体化的简单封装Activity和Fragment状态...

    TabControlEx选项卡右键菜单

    同时,也可以通过控件的AddItem方法在默认菜单上追加菜单项,AddItem有三个参数,第一个参数:菜单项Text,第二个参数:右键菜单方法,通过代理传递,第三个参数:返回值,出现异常时候带出异常原因。AddItem成功...

    WebSphere参数调优.txt

    我们可以通过点击 “按引用传送” 选项来调整ORB的参数传递方式。 4、应用程序服务器 &gt; server1 &gt;Web 容器-&gt;定制属性 MaxKeepAliveConnections:表示系统同时保存的最大连接个数,超过这一个数时最近最少被使用的...

    ehpi:增强型代理协议实现 (EHPI)

    ehpi - 增强的代理协议实现 ehpi支持正向和... 控制台通过传递DEBUG=ehpi启用调试日志记录。 埃皮构造一个 ehpi 实例。 参数options Object代理服务器的配置选项。 港口服务器的端口号。 服务器出错服务器的内部错误

    ember-query-params-proxy:Ember插件,可简化与DDAU兼容的查询参数

    通过此插件,您可以在子组件上传递参数时对兼容的查询参数进行处理。 这使得在应用程序中使用查询参数变得容易,并使控制器包含有关参数值的唯一事实来源。 queryParams代理为您提供了一种方便的方法,可以将多个...

    node-http-proxy:node.js的全功能http代理

    点击核心理念通过调用createProxyServer并将options对象作为参数传递来创建新的代理() var httpProxy = require ( 'http-proxy' ) ;var proxy = httpProxy . createProxyServer ( options ) ; // See (†) †除非...

    C#调用JavaWebService

    然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string类型能正常传递参数外,q其他类型的参数不是默认值就是...

    JavaScript设计模式之缓存代理模式原理与简单用法示例

    缓存代理可以为一些开销大的运算结果提供暂时的存储,在下次运算时,如果传递进来的参数跟之前的一致,则可以直接返回前面存储的运算结果,提供效率以及节省开销。 二、实例: var mult = function(){ console.log...

    安卓框架揭秘

    3.client调用某个代理接口中的方法时,代理接口的方法会将client传递的参数打包成为Parcel对象; 4.代理接口将该Parcel发送给内核中的binder driver. 5.server会读取binder driver中的请求数据,如果是发送给自己...

    python3 requests中使用ip代理池随机生成ip的实例

    啥也不说了,直接上代码吧! # encoding:utf-8 import requests # 导入requests模块用于访问测试自己的ip import random pro = ['1.119.129.2:8080', '115.174.66.148', '113.200.214.164'] ...# 你的请求头信息 ...

    aws-lambda-res:是使用代理集成为AWS Lambda创建响应对象的小帮手

    奥夫拉姆布达雷斯 是使用代理集成为AWS Lambda创建响应对象的小帮手 ... 您可以将标头作为第二个参数传递,body可以为null:例如,要注销并重定向到首页,您可以使用类似 function handler ( event , con

    front:正面。 图像代理和操纵器

    将远程图像 url 作为 url 参数传递到您的前端部署。 例如,代理一个不安全的 gopher http://golang.org/doc/gopher/frontpage.png : 调整图像大小 将宽度和高度参数添加到标准代理 url。 例如,对于较小的地鼠: ...

    TheNorthMemory / tenyun

    核心包通过实例化后两次Proxy动态代理,第一层代理 产品标识,第二层代理产品服务 实现了通过一个实例接入腾讯云各产品服务的能力,默认为最新版本的接口接入,同时提供往期版本(通过第二参数传递X-TC-Version头)的...

Global site tag (gtag.js) - Google Analytics