是否可以在addEventListener的末尾传递var?
/// clickType declared elsewhere in code.
checkBoxFast.addEventListener(clickType, goFast("yes"));
function goFast(evt:Event=null,myVar:String)
{
trace(myVar);
}
答案 0 :(得分:1)
我想如果你想参数化你的事件处理,我会建议将变量传递给事件。
创建自定义事件:
public class MyEvent extends Event {
public var myVar:String;
public function MyEventHistoryEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false) {
super(type, bubbles, cancelable);
}
}
- 使用所需变量从事件调度程序中调度此事件:
var event:MyEvent = new MyEvent("eventType");
event.myVar = "yes";
dispatchEvent(event);
- 添加一个事件处理程序:
checkBoxFast.addEventListener("eventType", eventHandler);
protected function eventHandler(event:MyEvent):void {
trace(event.myVar);
}
答案 1 :(得分:1)
另一种解决方案是使用anonymous function,如此:
checkBoxFast.addEventListener(clickType, function(e:Event):void{goFast("yes")});
function goFast(myVar:String)
{
trace(myVar);
}
答案 2 :(得分:1)
这是一个非常干净的方式:
checkBoxFast.addEventListener(clickType, goFast("yes"));
function goFast(myVar:String) {return function(e:Event) {
trace(myVar);
}}
但提防匿名函数,它们不会让你在同一个地方结束听众!如果你在应用程序中多次重复它,它可能会变慢并冻结。
实际上,我真的建议你这样做:
var functionGoFast:Function = goFast("yes");
checkBoxFast.addEventListener(clickType, functionGoFast);
function goFast(myVar:String):Function {
return function(evt:Event = null):void {
trace(myVar);
}
}
//checkBoxFast.removeEventListener(clickType, functionGoFast);
有关您案例的更多示例和解释,请参阅this answer。
答案 3 :(得分:0)
我猜想创建自定义事件是最好的方法。但我有时使用不同的方法。我不知道这是不是很好的做法,但它在某些情况下有效。
public function test() {
var myVar : String = "some value";
addEventListener(MouseEvent.CLICK, onClick);
function(e:Event){
trace(myVar);
}
}