as3 addEventListener - 在函数中传递变量?

时间:2012-09-28 23:28:25

标签: actionscript-3 flash addeventlistener

是否可以在addEventListener的末尾传递var?

/// clickType declared elsewhere in code.
checkBoxFast.addEventListener(clickType, goFast("yes"));

function goFast(evt:Event=null,myVar:String)
{
trace(myVar);
}

4 个答案:

答案 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);
        }

    }