1

正しい年代記の順序でイベントを起動および削除するのに問題があります。以下のコードは、次の出力を提供します。

  • ポスターをデータベースに保存し、イベントをディスパッチする
  • サービスの呼び出し、ディスパッチ イベントの削除 = false
  • サービスの呼び出し、ディスパッチ イベントの削除 = false
  • サービスの呼び出し、ディスパッチ イベントの削除 = true
  • ポスターをデータベースに保存し、イベントをディスパッチする
  • ポスターをデータベースに保存し、イベントをディスパッチする

もちろん、これは次のようになります。

  • ポスターをデータベースに保存し、イベントをディスパッチする
  • サービスの呼び出し、ディスパッチ イベントの削除 = true
  • ポスターをデータベースに保存し、イベントをディスパッチする
  • サービスの呼び出し、ディスパッチ イベントの削除 = true
  • ポスターをデータベースに保存し、イベントをディスパッチする
  • サービスの呼び出し、ディスパッチ イベントの削除 = true

誰かがこれで私を助けることができますか? これに取り組む方法についてのアイデアが不足しています。

どうも!

    for(var i:int = 0;i< 3;i++){
        createPoster();         
    }

    function createPoster(){
        Main.db.savePoster();
        Main.db.addEventListener(Config.evt_SAVEPOSTER_READY, callService);
    }

    function callService(){
       Main.db.removeEventListener(Config.evt_SAVEPOSTER_READY, callService);
    }
4

3 に答える 3

1

問題は、単一のオブジェクトcallServiceの同じイベントに対して同じ関数を登録していることです。そのため、ポスターの保存に成功した後、最初に savePoster がイベントをディスパッチするとすぐに、db がイベントを受信し、callService が 3 回登録されているため、3 つの eventHandler (この場合は callService) が呼び出されます。したがって、1 つの解決策は、Poster からイベントをディスパッチすることです。Config.evt_SAVEPOSTER_READYEvenDispatcherdb

for(var i:int = 0;i< 3;i++){
  createPoster();
}
function createPoster(){
  poster = Main.db.savePoster();
  poster.addEventListener(Config.evt_SAVEPOSTER_READY, callService);
}
function callService(e:PosterEvent){
  e.target.removeEventListener(Config.evt_SAVEPOSTER_READY, callService);
}

于 2009-12-02T19:51:29.717 に答える
0

1 つの項目だけをループするとどうなるか確認しましたか? 私には、ルーチンを適切にキューに入れていないようです。

イベント リスナーを Main.db オブジェクトに 1 回だけ追加し、すべての「ポスター」が正常に保存されたら削除することをお勧めします。

于 2009-12-02T18:57:04.333 に答える
0

データベース呼び出し ( Main.db.savePoster();) は同期的ですか? アクションが完了した後にのみ戻りますか? db 呼び出しの後に呼び出しているaddEventListenerため、db-call が同期の場合、イベント リスナーは (少なくとも最初の反復では) 呼び出されません。

Main.db3 回の反復すべてで同じインスタンスですか? その場合、同じイベント リスナーを 3 回登録する必要はありません。1 回で十分です。addEventListenerfor ループを開始する前に呼び出します。callService の呼び出し回数を追跡するためのカウンターを保持し、removeEventListenerカウンターがループ回数 (この場合は 3) に達したら呼び出します。

于 2009-12-03T04:56:05.377 に答える