Question

Je suis tombé sur un problem.I'm faire un programme SIG utilisant flex.

Il y a une carte dans ma demande, lorsque je clique sur une icône sur la carte, WINDOWA apparaît, lorsque je clique sur un lien dans WINDOWA, WindowB apparaît, mais voici mon problème en sortant, quand je ferme WindowB et cliquez sur le lien à l'intérieur WINDOWA une autre fois, deux WindowB pop-up ...

Dans mon WINDOWA, je

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

Dans WindowBControl, j'ai

addCommand(WindowBControl.EVENT_POPUPWindowB,WindowBCommand);

Dans WindowBCommand, j'ai

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

Quelqu'un pourrait-il me donner un coup de main?

Merci Beaucoup!

Best, Shuo

Était-ce utile?

La solution

Est-ce que WindowBControl hériter de FrontController? Si oui, vous êtes probablement instancier plus d'une fois sur un accident. Ceci:

<control:WindowBControl id='control1'>

va créer une instance de ce contrôleur avant. Puisque vous avez mis cette ligne de code dans WindowA, vous allez créer une nouvelle instance de ce contrôleur chaque fois que vous créez une nouvelle instance de WindowA. Cela résultera alors dans les commandes étant appelé une fois pour chaque instance du contrôleur chaque fois que votre événement se déclenche.

Vous ne devez instancier les contrôleurs avant où vous êtes sûr qu'ils ne seront instanciées une seule fois. La principale demande MXML est un bon endroit pour cela.

Autres conseils

Première

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

Je pense que vous devez appeler en quelque sorte PopupManager.removePopup parce que les Flex 3 états de référence ActionScript:

  

Affiche une fenêtre de niveau supérieur. Il est conseillé d'appeler pour enlever popups removePopUp () créé en utilisant la méthode addPopUp (). Si la classe implémente IFocusManagerContainer, la fenêtre aura son propre FocusManager de sorte que, si l'utilisateur utilise la touche TAB pour naviguer entre les contrôles, seuls les commandes de la fenêtre sont accessibles

Je trouve une autre solution.

Dans la méthode de fermeture de WINDOWA, j'écris

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

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top