page_adsence

2010年7月6日火曜日

dispatchEventに任意のパラメータを渡す

dispatchEventにパラメータを渡したい場合は自分で拡張するしかないらしい。
FlexSDKには元々mx.events.DynamicEventというものがあるみたいで、それを使えば出来るらしい。
なので、それを元にASのコードを書いてあげればOKみたいです。
ただし、受信側と送信側のどちらにパラメータをつけたいかで実装が変わるようです。
これがDynamicEventクラスの実装。
package {
import flash.events.Event;

public dynamic class DynamicEvent extends Event {
public function DynamicEvent(type:String, bubbles:Boolean = false,cancelable:Boolean = false) {
super(type, bubbles, cancelable);
}

override public function clone():Event {
return new DynamicEvent(type, bubbles, cancelable);
}
}
}


dynamicクラスになっている理由はコンパイルエラーを回避するためらしい。
現在は未検証。

送信側でパラメータを渡したい場合は以下の通り
var event:DynamicEvent = new DynamicEvent("eventName");
event.param1 = "文字列";
event.param2 = [1, 2, 3]; // 配列もOK
dispatchEvent(event);


受信側の設定は以下の通り
// イベントリスナーの設定
addEventListener("eventName", callbackFunction );

// コールバック側
private function callbackFunction(event:DynamicEvent):void {
trace(event.param1);
}


受信側でパラメータを渡したい場合は以下の通り
package {
import flash.display.Sprite;
import flash.events.Event;

public class MyClass extends Sprite {
// constructor
public function MyClass() {
var counter:int = 0;
//addEventListener()の第二引数をクロージャとして渡している
stage.addEventListener("click", function(event:Event):void {
clickHandler(event, counter++);
});
}

// コールバックメソッド
private function clickHandler(e:Event, counter:int):void {
trace( e.type + ':' + counter );
}
}
}


参照元:http://blogs.yahoo.co.jp/k3_labs/4399737.html