ケアンゴームXXXCommandは、複数回実行すること
-
20-09-2019 - |
質問
私はフレックス使用してGISプログラムをやってproblem.I'mに走っています。
私は、地図上の1つのアイコンをクリックすると、私はwindowA内部のリンクをクリックすると、windowAは、ポップアップし、私のアプリケーションでマップあります、windowBがポップアップしますが、ここで私はwindowBを閉じ、リンクをクリックしたときに私の問題は、出てきますwindowAの内側に別の時間、二windowBは
...ポップアップ表示します私のwindowAで、I持っています。
...
var windowBEvt:WindowBEvent = new WindowBEvent();
CairngormEventDispatcher.getInstance().dispatchEvent(windowBEvt);
...
<control:WindowBControl id='control1'>
WindowBControlでは、私が持っている
addCommand(WindowBControl.EVENT_POPUPWindowB,WindowBCommand);
WindowBCommandでは、私が持っている
public function execute(event:CairngormEvent):void
{
...
var windowB:WindowB = new WindowB();
PopUpManager.addPopUp(windowB);
...
}
誰が私に手を与えることができる?
多くの感謝!
ベスト、朔
解決
WindowBControlがFrontControllerから継承していますか?もしそうなら、あなたはおそらく事故で何度もそれ以上をインスタンス化しています。これます:
<control:WindowBControl id='control1'>
このフロントコントローラのインスタンスを作成しようとしています。あなたはWindowAにこのコード行を入れているので、あなたはこのコントローラの新しいインスタンスにあなたがWindowAの新しいインスタンスを作成するたびに作成するつもりです。これは、コントローラのインスタンスごとに一度呼び出されるコマンドであなたのイベントが発生するたびになります。
あなただけが、彼らは一度だけインスタンス化されるポジティブだフロントコントローラのインスタンスを作成する必要があります。メインアプリケーションのMXMLは、このための良い場所です。
他のヒント
まず
// Shouldn't this be in a FrontController class?
addCommand(WindowBControl.EVENT_POPUPWindowB,WindowBCommand);
私は、あなたが何らかの形で呼び出すことがあると思うPopupManager.removePopupのFlex 3のActionScriptリファレンス状態理由ます:
トップレベルのウィンドウをポップアップ表示します。 addPopUp()メソッドを使用して作成したポップアップを削除するにはremovePopUp()を呼び出すことをお勧めします。クラスでIFocusManagerContainerを実装すると、ウィンドウには、ユーザーがコントロール間を移動するにはTABキーを使用している場合、ウィンドウ内のコントロールだけがアクセスされるので、という独自のFocusManagerを持つことになります。
私は別の解決策を見つけるます。
windowAの決算方法では、私が書く
private function onClose():void
{
PopUpManager.removePopUp(this);
if(CairngormEventDispatcher.getInstance().hasEventListener(WindowBControl.EVENT_POPUPWindowB))
{
control1.removeCommand(WindowBControl.EVENT_POPUPWindowB);
}
}