0

私はフレックスプログラミングがまったく初めてで、私のコードではリスナーが適切に削除されていないように感じます。以下は、私が行ったことの例としてのコードです。初めてこのコードが実行され、すべて問題なく実行されました。あらゆる種類のアラートが表示されました。パスを追跡するために追加しました。しかし、2回目以降はアラートメッセージのみが表示されます:

 Alert.show('saveMapImageAndForward:before 2');

他のメッセージはありません。私は何を間違っていますか?リスナーを適切に削除する上で、私は正しい軌道に乗っていますか? コードパスは次のとおりです: saveMapImageAndForward->processMapImage-> addMapImage -> saveMapImage

グローバルタイマーを次のように作成しました: private var timer:Timer = new Timer(1000);

これが私のコードです:

public function saveMapImageAndForward(projectLocationWKT:String, projectMapType:String, hasMapImageFromIPaCMap:String, projectName:String):void {
    this.projectLocationWKT = projectLocationWKT;
    this.projectMapType = projectMapType;
    this.hasMapImageFromIPaCMap = hasMapImageFromIPaCMap;
    this.projectName = projectName;
    Alert.show('saveMapImageAndForward:before 2');
    _map.addEventListener(ZoomEvent.ZOOM_END, processMapImage);
    GlobalDispatcher.dispatchEvent(new AppEvent(DrawManager.ZOOM_TO_SELECTION));

}


//On zoom_end this function will be called
private function processMapImage(pEvent:ZoomEvent):void {
    Alert.show('inside processMapImage');
    _map.removeEventListener(ZoomEvent.ZOOM_END, processMapImage);
     Alert.show('after ZoomEvent removed');
    timer.addEventListener(TimerEvent.TIMER,addMapImage);
    timer.start();

}

//I need a delay of 1 sec so starting a timer
 private function addMapImage(pEvent:TimerEvent):void {
    Alert.show('inside addMapImage');
    timer.stop();
    timer.removeEventListener(TimerEvent.TIMER,addMapImage);
    Alert.show('after timer removed');
    saveMapImage();

}

//after 1 sec this method will be called
public function saveMapImage():void {

  //do something
}

誰でも助けることができますか?

4

0 に答える 0