2011-12-20 9 views
1

カスタムイベントクラスとEventDispatcher派生クラスを作成しました。 私は何をして、私のEventDispatcherクラスにいくつかのロジックを入れて、カスタムイベントをディスパッチしました。問題は私のメインアプリケーションからイベントを聴くことができません。EventDispatcherクラスを使用して送信されたイベントをリッスンします

メインアプリケーションで作成して編集するArraycollectionがあり、EventDispatcherに送信してチェックしたいのですが、ArrayCollectionをmain appにディスパッチして、オブジェクト。

私の全体のコードのロジックが正しくない場合は、ここで

は、いくつかのコード

のEventDispatcherサブクラス

public class LoadData extends EventDispatcher 
{ 
    public var sendData:DataSender = new DataSender('DataLoader',dataList,true); 
    private var dataList:ArrayCollection = new ArrayCollection();   
    dispatchEvent(sendData); 
} 

カスタムEventクラス

public class DataSender extends Event { 
    public var data:ArrayCollection = new ArrayCollection; 
    public function DataSender(type:String, data:ArrayCollection, bubbles:Boolean=true, cancelable:Boolean=false) 
    { 
     super(type, bubbles, cancelable); 
     this.data = data; 
    } 
} 
ある= [教えてください

メインアプリ

var DataEvent:LoadData = new LoadData(dataList); 
addEventListener('DataLoader',datacapture); 


public function datacapture(event:DataSender):void{ 
    check.dataProvider = event.data;  
} 

答えて

0

イベントを実際に聞く前に、イベントが送出されていないことを確認する必要があります。あなたのコードによると、イベントが発送される時期はあまり明確ではありません。

あなたのロジックの詳細を調べることなく、おそらくこのようなことをすることができます。私はこの実装を推奨していないことに注意してください。

//In the LoadData Class 
    public var sendData:DataSender = new DataSender('DataLoader',dataList,true); 
    private var dataList:ArrayCollection = new ArrayCollection(); 

    public function dispatch():void 
    { 
     dispatchEvent(sendData); 
    } 

    //In your Main App 
    var dataEvent:LoadData = new LoadData(dataList); 
    dataEvent.addEventListener('DataLoader',datacapture); 
    dataEvent.dispatch(); 
+0

10X !.なぜ私はこの実装をお勧めしないのですか?なぜそれを行うより良いですか? (私はイベントのディスパッチ/リッスンについて話しています)。私は、コードの他の部分もbaddly書かれていることを知っている(ちょうど行動スクリプトを習得し始めた) – user1108310

+1

パブリックメソッドを介してdispatchEvent()を呼び出すことは、このような良い考えのようには見えない。それ以外は、実装はかなり標準です。 – PatrickS

0

はい、あなたのコードは大混乱です。まず、オブジェクト指向プログラミングについてお読みになることをお勧めします。

次に、このを見てみましょう:

public class LoadData extends EventDispatcher { 

    public var sendData:DataSender; 
    private var dataList:ArrayCollection; 

    public function LoadData() { 
     //This is the CONSTRUCTOR which is run when you do new LoadData() 
    } 

    //This function is called when you want to dispatch the event 
    private function dispatch() { 
     dataList = new ArrayCollection();   
     sendData = new DataSender('DataLoader',dataList,true); 
     dispatchEvent(sendData); 
    } 

} 

次に、あなたのメインのアプリはこのようなものです:

その後
var dataEvent:LoadData = new LoadData(dataList); 
dataEvent.addEventListener('DataLoader', datacapture); 

、dataEvent.dispatch()関数が呼び出されるたびに、あなたのイベントハンドラがします呼び出される。

+0

あなたの答えをありがとうが、私はこの方法を使用してみました。あなたが提示した "メインアプリケーション"では、EventDispetcher(dataEvent)とイベント自体(DataSender)を実際に聞きますが、これはこれを行う方法ですか? – user1108310

+0

それは何ですか?あなたが何を得ているのか分からなかった –

関連する問題