Utilize uma derivação do pattern singleton:

1) Faça teu componente popup ter uma variável estática (static var) do tipo do teu componente. 2) Faça um método estático (static function) que cria teu componente (new), coloque ele na variável 1 acima e o exiba na tela usando os métodos convencionais. 3) Faça com que o método 2 acima verifique se a variável 1 é diferente de null. Se for diferente, use o popupmanager para trazer a janela 1) para frente ao invés de criar uma nova.
4) No evento de fechamento do teu popup, sete 1) para null.

Pronto. Desta forma você tem um método estático que ou abre uma nova popup, ou coloca a popup já aberta no topo da stack de janelas.

--------------------------------------------------
From: "Bruno Carneiro" <guimaraescarne...@gmail.com>
Sent: Saturday, November 21, 2009 10:18 AM
To: "flexdev" <flexdev@googlegroups.com>
Subject: [flexdev] Problema com popup


private function novaContaClick(event:Event):void{
var h:handle_conta = new handle_conta();
PopUpManager.addPopUp(h,this);
}

Dessa forma, se o usuario clicar 10 vezes, abre 10 popups iguais. Eu
queria no máximo 1.


var h:handle_conta = new handle_conta();

private function novaContaClick(event:Event):void{
PopUpManager.addPopUp(h,this);
}

Dessa forma, se o usuário clicar várias vezes no botão, depois fechar
a janela e tentar abrir denovo, da erro. RangeError: Error #2006: O
índice fornecido está fora dos limites.

Tentei usar uma variável de controle



public var novaconta:Boolean = false;

private function init():void{
this.addEventListener("fecharNovaConta",function ():void{
Alert.show("fechou"); //aqui eu queria setar novaconta = false para
poder abrir novamente
},true);
}

private function novaContaClick(event:Event):void{
if (!this.novaconta){
var h:handle_conta = new handle_conta();
PopUpManager.addPopUp(h,this);
this.novaconta = true;
}
}



E no meu popup eu faço assim

private function close(event:Event):void{
var evt:Event = new Event("fecharNovaConta");
this.dispatchEvent(evt);
PopUpManager.removePopUp(this);
}

Mas o evento não é capturado e o alert não é chamado.


Como eu poderia resolver isso?
--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Responder a