addEventListenerの最後にvarを渡すことは可能ですか?
/// clickType declared elsewhere in code.
checkBoxFast.addEventListener(clickType, goFast("yes"));
function goFast(evt:Event=null,myVar:String)
{
trace(myVar);
}
addEventListenerの最後にvarを渡すことは可能ですか?
/// clickType declared elsewhere in code.
checkBoxFast.addEventListener(clickType, goFast("yes"));
function goFast(evt:Event=null,myVar:String)
{
trace(myVar);
}
イベントの処理をパラメーター化したい場合は、変数をイベントに渡すことをお勧めします。
-カスタムイベントを作成します。
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);
}
別の解決策は、次のような無名関数を使用することです。
checkBoxFast.addEventListener(clickType, function(e:Event):void{goFast("yes")});
function goFast(myVar:String)
{
trace(myVar);
}
カスタムイベントを作成するのが最善の方法だと思います。しかし、私は時々異なるアプローチを使用していました。それが良い習慣かどうかはわかりませんが、場合によってはうまくいきます。
public function test() {
var myVar : String = "some value";
addEventListener(MouseEvent.CLICK, onClick);
function(e:Event){
trace(myVar);
}
}
これがかなりきれいな方法です:
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);
あなたのケースに関するより多くの例と説明については、この回答を参照してください。