功能我有这样的代码:你怎么一个变量绑定到AS3
for each(var tool in tools){
tool.addEventListener(MouseEvent.MOUSE_DOWN, function(){
trace(tool); //Always the last tool
});
}
怎样工具的价值结合的功能,因此,它的回调访问?
功能我有这样的代码:你怎么一个变量绑定到AS3
for each(var tool in tools){
tool.addEventListener(MouseEvent.MOUSE_DOWN, function(){
trace(tool); //Always the last tool
});
}
怎样工具的价值结合的功能,因此,它的回调访问?
,你必须使用里面的函数一个正确绑定范围的函数。这在AS3中是一种攻击。如果你可以帮到它,最好不要去那个兔子洞。如果你一定要,但...
for(var tool:Tool in _tools){
var getHandler(scope:Tool):Function{
var t:Tool = scope;
return function(e:MouseEvent):void{trace(t)}
}
tool.addEventListener(MouseEvent.CLICK, getHandler(tool));
}
编辑:当然,你需要在处理工作应传递到getHandler以及...所以不是只接受范围PARAM任何变量,你也可以传递你的ID,数量,当前状态或其他。
编辑2:但问问自己这个问题。你将如何移除该事件监听器?这是我说完全避开这个兔子洞的最大原因。这是可能的,但通常比使用更多的OOP解决这个问题的方法比lambda函数更麻烦。
试试这个。
for each(var tool in tools){
tool.addEventListener(MouseEvent.MOUSE_DOWN, toolFunction)
}
function toolFunction (e:MouseEvent){
trace(e.currentTarget)
}
Aftear读书问题又来冠军,我意识到,什么ü需要的是自定义事件或:
for each(var tool in tools){
tool.addEventListener(MouseEvent.CLICK,
function(e:MouseEvent){toolFunction (e, "another param")},
false, 0, true);
}
function toolFunction (e:MouseEvent,anotherParam:String){
trace(e.currentTarget)
trace(anotherParam) //output "another param"
}
我需要在未来绑定其他东西,而不仅仅是与mouseEvent相关的东西 – QuinnBaetz 2011-06-08 18:22:16
与e.currentTarget相比,您基本上不会使用MouseEvent本身做很多事情,而是使用目标元素(工具/ s)在你的情况下。这样,你总会得到正确的工具元素,而不仅仅是最后一个。如果这个工具是一个对象,你可以指定任何你喜欢的东西。 – Urosan 2011-06-08 18:30:39
尽量做到:
for each(var tool in tools){
var t = tool;
t.addEventListener(MouseEvent.MOUSE_DOWN, function(){
trace(t); //Always the last tool
});
}
不能在循环内嵌套函数,函数调用的参数在循环的所有迭代中将具有相同的值,并且该值将来自最后一次迭代。有一些窍门可以解决这个问题,但这不是一种好的编程习惯,并且在将来很难修改它。
你需要做的是更多的OOP风格。
由于Tool类显然是自定义的,因此您需要修改它以保存值或任何您将来讨论的引用。
基本上,如果你有一个值需要传递给那个对象,那么就把这个值作为类Tool的一个属性。
不,如果你足够棘手,它肯定有可能早日绑定“工具”的价值。全都归属于范围管理。不过,我同意以OOP的方式做这件事会更好。 – scriptocalypse 2011-06-08 19:39:26
使用AS3信号
http://www.peterelst.com/blog/2010/01/22/as3-signals-the-best-thing-since-sliced-bread/
它可以很好地满足您的问题。一旦我尝试过信号,我不能回去。它比as3中的事件系统要好得多
你知道,我其实并不是Signals的忠实粉丝。它似乎总是为另一个问题(繁琐的听众体操)交易(编译时类型安全性的损失和难以发现的需要访问原始源代码的API)。 – scriptocalypse 2011-06-08 20:10:50
如果getHandler被定义了,会不会是'嵌套'函数,而是出现在我的文档类中呢? – hoff2 2011-06-08 20:34:38
@Centipedefarmer绝对。事实上,我会说这比我上面写的更好。 – scriptocalypse 2011-06-08 20:35:46
自从开始这样做以来,我一直在遇到很多删除问题。我一直在创建对象的完整副本并重置变量。不是一个好的或干净的解决方案,但它的工作原理:/ – QuinnBaetz 2011-06-10 04:16:02