Pergunta

Eu encontrei um problema. Estou fazendo um programa GIS usando o Flex.

Há um mapa no meu aplicativo, quando clico em um ícone no mapa, Windowa aparece, quando clico em um link dentro de Windowa, Windowb aparece, mas aqui meu problema sai, quando fecho o WindowB e clico no link dentro de Windowa outro Tempo, dois windowb pop -up ...

Na minha janela, eu tenho

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

Em WindowbControl, eu tenho

addCommand(WindowBControl.EVENT_POPUPWindowB,WindowBCommand);

Em WindowbCommand, eu tenho

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

Alguém poderia me dar uma mão?

Muito obrigado!

Melhor, Shuo

Foi útil?

Solução

O WindowBControl herda do FrontController? Nesse caso, você provavelmente está instanciando mais de uma vez por acidente. Este:

<control:WindowBControl id='control1'>

vai criar uma instância desse controlador frontal. Como você colocou essa linha de código no Windows, criará uma nova instância desse controlador toda vez que criar uma nova instância do Windows. Isso resultará em comandos sendo chamados uma vez para cada instância do controlador sempre que o seu evento dispara.

Você só deve instanciar controladores frontais, onde você tiver certeza de que eles só serão instanciados uma única vez. O principal aplicativo MXML é um bom lugar para isso.

Outras dicas

Primeiro

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

Eu acho que você precisa de alguma forma chamar popupManager.removepopup porque o Flex 3 ActionScript Reference States:

Aparece uma janela de nível superior. É uma boa prática chamar RemowPPOPUP () para remover pop -ups criados usando o método addpopup (). Se a classe implementar o IfocusManagerContainer, a janela terá seu próprio foco para que, se o usuário usar a tecla TAB para navegar entre os controles, apenas os controles na janela serão acessados

Eu encontro outra solução.

No método de fechamento de Windowa, eu escrevo

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

}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top