`
bigt
  • 浏览: 44679 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

往事件监听器中添加额外参数

 
阅读更多
Problem
as Flex documentation states, the way to pass additional parameters to event listener is to use MXML tag., here is how to archive that using ActionScript.

Solution
Using Inline Function

Detailed explanation
solution is very simple, basically for  following scenario :
arbitrary button called ABCButton,function ABCButtonListener needs to listen to click event and also receive extra parameter
引用
"myPrivateSpecialObject"
object.

you do following :

private function ABCButtonListener(e:MouseEvent,specialObj:Object):void
{
        Alert.show(specialObj.name);
 }


private function methodWhereyouDostuffAndRegisterListener(): void
{
      var myPrivateSpecialObject:Object = {name:"Special String Ingredients for Orange"};

      ABCButton.addEventListener(MouseEvent.CLICK,
                            function(e:MouseEvent) :void
                            {
                                 ABCButtonListener(e,myPrivateSpecialObject);
                            });
}


P.S -----------------

you can use same structure to register listener for more than one button,for example :

private function methodWhereyouDostuffAndRegisterListener(): void {
      var myPrivateSpecialObject:Object = {name:"Special String
Ingredients for Orange"};

            ABCButton.addEventListener(MouseEvent.CLICK,function
(e:MouseEvent) : void {
                  ABCButtonListener(e,myPrivateSpecialObject);

      // if removing event listener is desired uncomment below:
//IEventDispatcher(e.currentTarget).removeEventListener(e.type,arguments.callee);
            });


       
       myPrivateSpecialObject = {name:"Special Ingredients for
Apple"};

       OtherButtonButton.addEventListener(MouseEvent.CLICK,function
(e:MouseEvent) : void {
                 
OtherButtonButtonListener(e,myPrivateSpecialObject);

      // if removing event listener is desired uncomment below:
    
//IEventDispatcher(e.currentTarget).removeEventListener(e.type,arguments.callee);
       });

}


above  code registers same listener for two buttons but before registering second listener , we try to modify
引用
myPrivateSpecialObject
. so, reference is changed to have different value, but if you assume now each listener received different value , its not correct, they will both received latest assigned value .  overall inline function is good technique to pass   any number of parameters to a listener as long as listener is ready for those parameters.       

UPDATE: way to remove linine functions from event listeners afterwards.

basically, if you want to remove inline function as listener from DIspatcher, there is two ways,
one is to add it as weakRefference, but second is even better:
just add this inside the Listener Function:
IEventDispatcher(e.currentTarget).removeEventListener(e.type,arguments.callee);

          
分享到:
评论

相关推荐

    Node.js MongoDB AngularJSWeb开发中文版.part1

    第4章 在Node.js中使用事件、监听器、定时器和回调 51 4.1 了解Node.js事件模型 51 4.1.1 比较事件回调和线程模型 51 4.1.2 在Node.js中阻塞I/O 52 4.1.3 会话示例 54 4.2 将工作添加到事件队列 54 4.2.1 实现定时器...

    Spring-Reference_zh_CN(Spring中文参考手册)

    4.7.2. Application context构造器中资源路径的通配符 4.7.2.1. Ant风格的pattern 4.7.2.2. classpath*: 前缀 4.7.2.3. 其他关于通配符的说明 4.7.3. FileSystemResource 提示 5. 校验,数据绑定,BeanWrapper,与...

    Hibernate实战(第2版 中文高清版)

     12.3.4 实体监听器和回调   12.4 小结   第13章 优化抓取和高速缓存   13.1 定义全局抓取计划   13.1.1 对象获取选项   13.1.2 延迟的默认抓取计划   13.1.3 理解代理   13.1.4 禁用代理生成   ...

    Spring.3.x企业应用开发实战(完整版).part2

    12.2.4 添加Hibernate事件监听器 12.2.5 使用原生Hibernate API 12.2.6 使用注解配置 12.2.7 事务处理 12.2.8 延迟加载的问题 12.3 在Spring中使用myBatis 12.3.1 配置SqlMapClient 12.3.2 在Spring配置myBatis ...

    Spring3.x企业应用开发实战(完整版) part1

    12.2.4 添加Hibernate事件监听器 12.2.5 使用原生Hibernate API 12.2.6 使用注解配置 12.2.7 事务处理 12.2.8 延迟加载的问题 12.3 在Spring中使用myBatis 12.3.1 配置SqlMapClient 12.3.2 在Spring配置myBatis ...

    JMETER性能测试快速入门

    6.Jmeter脚本的增强 主要包括:添加延时器、监听器、增加断言、进行参数化、增加关联、增加事务 7.Jmeter脚本的执行 8.Jmeter脚本的结果分析 9.Jmeter脚本的最佳实践 Jmeter需要遵守最佳实践的规定,确保测试结果的...

    qwertySeq()-crx插件

    (通过选择“使能”来返回监听器,然后刷新页面,只需输入一次即可。)在传输顶部选择适当的MIDI输出设备。选择音序1选择所需的长度,然后单击“确定”。输出通道,对应于接收硬件设备。启用顺序中的步骤并调整所需...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    在 web.xml 中添加 HttpFlexSession 和 Servlet 映射。HttpFlexSession 是 BlazeDS 提供的一个 Listener,负责监听 Flex 远程调用请求,并进行一些初始化设置: 清单 4. 定义 Flex Listener <listener> ...

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    在 web.xml 中添加 HttpFlexSession 和 Servlet 映射。HttpFlexSession 是 BlazeDS 提供的一个 Listener,负责监听 Flex 远程调用请求,并进行一些初始化设置: 清单 4. 定义 Flex Listener <listener> ...

    计算机应用技术(实用手册)

    后面是IDE设备的类型和硬件参数,TYPE用来说明硬盘设备的类型,我们可以选择AUTO、USER、NONE的工作模式,AUTO是由系统自己检测硬盘类型,在系统中存储了1-45类硬盘参数,在使用该设置值时不必再设置其它参数;...

    达内 coreJava 习题答案

    其中a为1至9之中的一个数,项数也要可以指定。 import java.util.Scanner; class Multinomial{ public static void main(String[] args){ int a; //定义输入的 a int howMany; //定义最后的一项有多少个数字 ...

Global site tag (gtag.js) - Google Analytics