1

addEventListenerの最後にvarを渡すことは可能ですか?

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

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

4 に答える 4

2

イベントの処理をパラメーター化したい場合は、変数をイベントに渡すことをお勧めします。

-カスタムイベントを作成します。

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);
}
于 2012-09-29T05:13:21.990 に答える
1

別の解決策は、次のような無名関数を使用することです。

checkBoxFast.addEventListener(clickType, function(e:Event):void{goFast("yes")});

function goFast(myVar:String)
{
    trace(myVar);
}
于 2012-09-29T10:09:53.967 に答える
0

カスタムイベントを作成するのが最善の方法だと思います。しかし、私は時々異なるアプローチを使用していました。それが良い習慣かどうかはわかりませんが、場合によってはうまくいきます。

public function test() {

        var myVar : String = "some value";
        addEventListener(MouseEvent.CLICK, onClick);


        function(e:Event){
            trace(myVar);
        }

    }
于 2012-09-29T10:00:59.857 に答える
0

これがかなりきれいな方法です:

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);

あなたのケースに関するより多くの例と説明については、この回答を参照してください。

于 2012-11-22T05:08:02.113 に答える