Frage

Ich lief in ein problem.I'm ein GIS-Programm zu tun flex verwendet wird.

Es gibt eine Karte in meiner Anwendung, wenn ich auf der Karte ein Symbol klicken, Fenster A erscheint, wenn ich einen Link in Fenster A klicken, öffnen Fenster B, aber hier mein Problem herauskommen, wenn ich Fenster B schließen und klicken Sie auf den Link innen Fenster A ein weiteres Mal, Pop Zwei Fenster B nach oben ...

In meinem Fenster A, ich habe

...
var windowBEvt:WindowBEvent = new WindowBEvent();
CairngormEventDispatcher.getInstance().dispatchEvent(windowBEvt);
...
<control:WindowBControl id='control1'>

In WindowBControl, ich habe

addCommand(WindowBControl.EVENT_POPUPWindowB,WindowBCommand);

In WindowBCommand, ich habe

public function execute(event:CairngormEvent):void
{
    ...
    var windowB:WindowB = new WindowB();
    PopUpManager.addPopUp(windowB);
    ...
}

Könnte jemand geben Sie mir eine Hand?

Vielen Dank!

Best, Shuo

War es hilfreich?

Lösung

Does WindowBControl erben von Frontcontroller? Wenn ja, sind instanziieren Sie es wahrscheinlich mehr als einmal auf das Unfallgeschehen. Dies:

<control:WindowBControl id='control1'>

wird eine Instanz dieser Front-Controller erstellen. Da Sie in Fenster A setzen diese Codezeile haben, Sie gehen jedes Mal, erstellen Sie eine neue Instanz von Fenster A eine neue Instanz dieser Controller erstellen. Dies führt dann in Befehle einmal für jede Instanz des Controllers jedes Mal, wenn Ihr Ereignis ausgelöst wird aufgerufen wird.

Sie sollten nur instantiate Front-Controller, wo Sie positiv werden sie nur ein einziges Mal instanziiert werden. Die Hauptanwendung mxml ist ein guter Ort dafür.

Andere Tipps

Erste

// Shouldn't this be in a FrontController class?
addCommand(WindowBControl.EVENT_POPUPWindowB,WindowBCommand);

Ich glaube, man muss irgendwie PopupManager.removePopup weil die Flex 3 Actionscript-Referenzzustände nennen:

  

erscheint ein Fenster der obersten Ebene. Es ist eine gute Übung, um die Anruf removePopUp () Popups unter Verwendung der addPopUp () -Methode erstellt zu entfernen. Wenn die Klasse implementiert IFocusManagerContainer, wird das Fenster seine eigenen Focusmanager damit hat, wenn der Benutzer die TAB-Taste verwendet zwischen den Kontrollen zu navigieren, werden nur die Steuerelemente im Fenster griffenen

sein

ich eine andere Lösung finden.

Im Fenster A Schluss Methode, ich schreibe

private function onClose():void
{
     PopUpManager.removePopUp(this);
     if(CairngormEventDispatcher.getInstance().hasEventListener(WindowBControl.EVENT_POPUPWindowB))
     {
         control1.removeCommand(WindowBControl.EVENT_POPUPWindowB);
     }

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top