未分類

カスタムクラスのカスタムイベント

[`evernote` not found]
LINEで送る
Pocket

AIRを使うとローカルでSQLiteを利用できるということで、
PHPのPearに近い感じで自作クラスを作ろうとクラスを作っていたのだが、DBから取得したデータが確かに自分の組んだ配列に格納されたという事を知らせる必要があった。

単にDBからデータを取得した、というだけならSQLEventを使えば良いのだが、今回はその後に処理をする必要がある。
ということは、それを知らせるイベントが必要になるので、カスタムイベントを自作クラスに実装させた。

その方法。

まず、イベント系のクラスをインポート。(下で継承しているからいらないかも)
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher; //いらないかも知れないです。

クラスにEventを継承。
public class DB extends Event

次に、EventDispatcherのオブジェクトを生成。
var event_dispatcher:EventDispatcher = new EventDispatcher();

さらに、このクラスにイベントを実装させるので、
Event系にある、addEventListener, dispatchEvent, hasEventListener, removeEventListener, willTriggerを実装。

スーパークラスを呼び出す。
super(“customEvent”);

//super()メソッドについて
http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/statements.html

Eventクラスの各メソッドを置き換え(上書き)するので、
overrideをつけます。
public override function clone():Event{
return new DB();
}
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{
event_dispatcher:EventDispatcher.addEventListener(type , listener, useCapture, priority, useWeakReference);
}
public function dispatchEvent(evt:Event):Boolean{
return event_dispatcher:EventDispatcher.dispatchEvent(evt);
}
public function hasEventListener(type:String):Boolean{
return event_dispatcher:EventDispatcher.hasEventListener(type);
}
public function removeEventListener(type:String, listener:Function,useCapture:Boolean):void{
event_dispatcher:EventDispatcher.removeEventListener(type, listener, useCapture);
}
public function willTrigger(type:String):Boolean{
return event_dispatcher:EventDispatcher.willTrigger(type);
}

ここまではまるまるコピーでもいいんじゃないでしょうか。

以上の設定をしておけば、イベントを配信するときは、

event_dispatcher.dispatchEvent( new Event(“myEvent”) );

とでもしておけば、

var db:DB = new DB();

db.addEventListener(“myEvent”, myEventHandler);

としておけば、

function myEventHandler(e:Event):void{
//処理
}

とでもしておけば利用可能です!!!

2007年7月8日23:34

Leave a Reply

Your email address will not be published.

CAPTCHA