Event な書き方
AS3 で自作の Event を使うとき、だいたいこんな感じになる。
ButtonEvent.as
public class ButtonEvent extends Event
{
public static const CLICKED:String = 'CLICKED';
public function ButtonEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
}
Foo.as
public class Button extends EventDispatcher
{
public function click():void
{
dispatchEvent(new ButtonEvent(ButtonEvent.CLICKED));
}
}
Bar.as
var button:Button = new Button();
button.addEventListener(ButtonEvent.CLICKED, function(e:Event):void {
trace("The button clicked.");
});
as3signals での書き方
Foo.as
public class Button
{
public const clicked:Signal = new Signal;
public function click():void
{
clicked.dispatch();
}
}
Bar.as
var button:Button = new Button();
button.clicked.add(function():void {
trace("The button clicked.");
});
メリット
- Button クラスがむやみに EventDispatcher を継承しなくて良い
- 文字列を使ったイベントの識別を行わなくて良い
- 例えば ButtonEvent.CLICKED と ToggleEvent.CLICKED が同じ "CLICKED" だったりするとバグっても気づきにくい
- Button が dispatch するイベント(シグナル)がソースコードに明示的に書かれていて、コンパイル時に決定されている
- Event Metadata というのもありますが・・・。 http://stackoverflow.com/questions/675402/as3-eventname-type-what-is-the-significance
- 記述量がすくない