Domanda

Mi sono imbattuto in un problem.I'm facendo un programma GIS utilizzando flex.

C'è una mappa nella mia richiesta, quando clicco un'icona sulla mappa, WindowA si apre, quando clicco un link all'interno WindowA, WindowB si apre, ma qui il mio problema che esce, quando chiudo WindowB e cliccare sul link all'interno WindowA un'altra volta, due WindowB pop-up ...

Nel mio WindowA, ho

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

In WindowBControl, ho

addCommand(WindowBControl.EVENT_POPUPWindowB,WindowBCommand);

In WindowBCommand, ho

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

Qualcuno potrebbe darmi una mano?

Molto Grazie!

Best, Shuo

È stato utile?

Soluzione

La WindowBControl eredita da FrontController? Se è così, probabilmente stai istanziare più di una volta su incidente. Questo:

<control:WindowBControl id='control1'>

sta per creare un'istanza di questo front controller. Dal momento che hai messo questa riga di codice in WindowA, si sta andando a creare una nuova istanza di questo controller ogni volta che si crea una nuova istanza di WindowA. Questo sarà quindi causare comandi chiamati una volta per ogni istanza del controller ogni volta che i tuoi generato l'evento.

Si dovrebbe istanziare solo front controller in cui sei positivo che saranno istanziati una sola volta. L'MXML principale applicazione è un buon posto per questo.

Altri suggerimenti

Prima

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

Credo che bisogna chiamare in qualche modo PopupManager.removePopup perché le Flex 3 stati di riferimento di ActionScript:

  

Si apre una finestra di primo livello. E 'buona pratica di chiamare removePopUp () per rimuovere i popup create utilizzando il metodo () addPopUp. Se la classe implementa IFocusManagerContainer, la finestra avrà un proprio FocusManager in modo che, se l'utente utilizza il tasto TAB per spostarsi tra i controlli, solo i controlli della finestra saranno accessibili

I trovare un'altra soluzione.

Nel metodo di chiusura di WindowA, scrivo

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

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top