首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

Flex4之关于循环注册事件有关问题

2012-11-09 
Flex4之关于循环注册事件问题首先呢,标题说的有些模糊,其实我关键的意思就是对于循环里面注册事件的处理方

Flex4之关于循环注册事件问题

首先呢,标题说的有些模糊,其实我关键的意思就是对于循环里面注册事件的处理方式,其实呢我自己是不会写的

我之前写的就像这样:

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"    xmlns:s="library://ns.adobe.com/flex/spark"    xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"    creationComplete="init()"> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.controls.Button; function init():void{   for(var i:int=0;i<10;i++){    var btn:Button=new Button();    btn.x=i*20;    btn.y=i*20;            btn.width=i*40;    btn.height=i*20;       this.addElement(btn);       btn.addEventListener(MouseEvent.CLICK,function(e:MouseEvent){                  click(String(i));       }    );        }   } function click(str:String){ Alert.show(str); } ]]> </fx:Script> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> </s:Application> 

??初始化时往页面上循环增加十个不同按钮,然后给每个按钮注册一个事件,点击按钮实现操作效果不同,比如上边我就想实现的是点击第一按钮弹出0,点击第二个弹出2....但是实际结果是点击十个按钮显示的都是同一个数字

所以到了问答频道问了问题,一会便有高手回答,他的原话是这样

btn.addEventListener(MouseEvent.CLICK,function(e:MouseEvent){
???????????????? click(String(i));??
?? }
?? );

闭包中获得的i不是当前循环的i,而是当你点击按钮触发事件时,i的值。。
flex很奇怪,在for循环中定义的i,在外部同样可以获得。
正确的写法应该这样:

function init():void{for(var i:int=0;i<10;i++){var btn:Button=new Button();btn.x=i*40;btn.y=i*20;btn.width=40;btn.height=20;this.addChild(btn);btn.addEventListener(MouseEvent.CLICK,clickfunc(i));}}function clickfunc(arg):Function{var func=function(e):void{click(arg)}return func;}function click(str:String){Alert.show(str);}

?

其实我也没搞懂他说的啥意思,反正效果实现了,谁如果清楚原理,请不吝赐教

1 楼 zhong_pro 2011-12-02   其实js也这样闭包的。

热点排行