静的クラスにイベントを送出させるには、コンポジションを適用して、イベント周りの振る舞いを EventDispatcher インスタンスに委譲すればよい。これは静的クラスに限らず、既存のクラスを拡張する際に使えるテクニック。
以下、サンプルクラス。
package { import flash.events.EventDispatcher; import flash.events.Event; public class Hoge { private static var dispatcher:EventDispatcher = new EventDispatcher(); public static function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0):void { dispatcher.addEventListener(type, listener, useCapture, priority); } public static function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void { dispatcher.removeEventListener(type, listener, useCapture); } public static function dispatchEvent(type:String):Boolean { return dispatcher.dispatchEvent(new Event(type)); } public static function hasEventListener(type:String):Boolean { return dispatcher.hasEventListener(type); } public static function test():void { dispatchEvent("hoge"); } } }
テストコード。
Hoge.addEventListener("hoge", function():void { trace("Hello Hoge"); }); Hoge.test();//Hello Hoge