【发布时间】:2010-09-30 09:42:42
【问题描述】:
这个问题不仅仅与 MouseEvent.CLICK 事件类型有关,还与 AS3 中已经存在的所有事件类型有关。我阅读了很多关于自定义事件的内容,但直到现在我都无法弄清楚如何做我想做的事情。我试着解释一下,希望你能理解:
这是我的情况的说明:
for(var i:Number; i < 10; i++){
var someVar = i;
myClips[i].addEventListener(MouseEvent.CLICK, doSomething);
}
function doSomething(e:MouseEvent){ /* */ }
但我希望能够将 someVar 作为参数传递给 doSomething。所以我尝试了这个:
for(var i:Number; i < 10; i++){
var someVar = i;
myClips[i].addEventListener(MouseEvent.CLICK, function(){
doSomething(someVar);
});
}
function doSomething(index){ trace(index); }
这种工作,但不是我所期望的。由于函数闭包,当 MouseEvent.CLICK 事件被实际触发时,for 循环已经结束并且 someVar 保持最后一个值,即数字 9 在示例中。因此,每个影片剪辑中的每次点击都会调用 doSomething,并传递 9 作为参数。这不是我想要的。
我认为创建自定义事件应该可以工作,但是当触发 MouseEvent.CLICK 事件并将参数传递给它时,我找不到触发自定义事件的方法。现在不知道是不是正确答案。
我应该怎么做?
【问题讨论】:
-
对于其他研究此问题的人,我在此处添加了一个关于将参数传递给函数的快速代码示例:rocketwidget.com/…
标签: apache-flex flash actionscript-3 events closures