Pregunta

Me encontré con un problem.I'm haciendo un programa SIG usando la flexión.

Hay un mapa en mi aplicación, al hacer clic en un icono en el mapa, VentanaA aparece, al hacer clic en un enlace dentro de VentanaA, VentanaB aparece, pero aquí mi problema que sale, cuando cierro VentanaB y haga clic en el enlace dentro VentanaA otra vez, dos VentanaB pop-up ...

En mi VentanaA, tengo

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

En WindowBControl, tengo

addCommand(WindowBControl.EVENT_POPUPWindowB,WindowBCommand);

En WindowBCommand, tengo

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

¿Podría alguien darme una mano?

Mucho gracias!

Best, Shuo

¿Fue útil?

Solución

¿Tiene WindowBControl hereda de FrontController? Si es así, es probable que instanciar más de una vez en el accidente. Este:

<control:WindowBControl id='control1'>

va a crear una instancia de este controlador frontal. Puesto que usted ha puesto esta línea de código en VentanaA, que va a crear una nueva instancia de este controlador cada vez que se crea una nueva instancia de VentanaA. Esto dará entonces como resultado comandos que se llama una vez para cada instancia del controlador cada vez que sus desencadena el evento.

Sólo debe crear una instancia de controladores frontales, donde usted es positivo que sólo se pueden crear instancias de una sola vez. El mxml principal de la aplicación es un buen lugar para ello.

Otros consejos

En primer lugar

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

Yo creo que hay que llamar de alguna manera PopupManager.removePopup porque los Flex 3 estados de referencia de ActionScript:

  

hace aparecer una ventana de nivel superior. Es una buena práctica para llamar removePopUp () para eliminar ventanas emergentes creadas utilizando el método () addPopUp. Si la clase implementa IFocusManagerContainer, la ventana tendrá su propio FocusManager de manera que, si el usuario utiliza la tecla TAB para desplazarse entre los controles, se accederá únicamente los controles de la ventana

Me encuentro otra solución.

En el método de cierre de VentanaA, escribo

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

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top