Ue.. entao esse é o caso mais simples:
Dá uma olhada abaixo:
Na tela de cadastroDeFuncionario:
private var abreJanelaTelefone():void {
var telefoneWin : CadastroDeTelefone = new CadastroDeTelefone();
//aqui vc amarra o listener. se o evento for disparado dentro da janela,
esse listener vai captura-lo.
telefoneWin.addEventListener(EVENTO_DA_JANELA_TELEFONE,
metodoNaJanelaDeCadastro);
PopUpManager.addPopUp(telefoneWin);
}
Agora dentro da CadastroDeTelefone:
dispatchEvent(Event("EVENTO_DA_JANELA_TELEFONE"));
simples assim.
2009/10/14 Andre de Souza Martins <[email protected]>
> Ola Mario,
>
> As duas janelas tem o seguinte nivel de hierarquia...
>
> Application
> |----------CadastroDeFuncionario
> |----------CadastroDeTelefone
>
> ou seja, a CadastroDeFuncionario é que cria a Cadastro de Telefone, e estou
> tentando enviar um evento da Cadastro de Telefone para a Cadastro de
> Funcionario.
>
>
> Agradecido
>
> André Martins
>
> ------------------------------
> Date: Tue, 13 Oct 2009 01:44:33 -0300
> Subject: [flexdev] Re: [Urgente] Disparar Eventos no Adobe Flex
> From: [email protected]
>
> To: [email protected]
>
> Cara....
> duas duas janelas estão contidas no mesmo nível de hierarquia da
> displayList?
>
> Se nem souber oq é isso... daí vc vai apanhar muito com eventos.
> Lembre q os eventos navegam pelas camadas de "baixo para cima" nessa
> hierarquia. Se vc tem duas janelas na mesma ordem, uma NUNCA vai ouvir a
> outra... A MENOS que elas tenham algo em comum, mas daí o listener tem q ser
> adicionado nesse objeto em comum (pode ser o parent que o Clayton sugeriu,
> embora fique um pouco acoplado e isso também te obrigue que o parent entre
> as duas janelas seja SEMPRE o mesmo objeto, ou seja.. reusabilidade
> comprometida).
>
> Outra ideia seria centralizar isso numa classe unica (singleton) que
> extends de EventDispatcher. Isso permitirá a essa classe q ela amarre
> listeners e que tb dispare seus eventos personalizados. Assim vc usaria essa
> classe para transportar os objetos de *qualquer lugar *da sua app* para
> qualquer outro lugar* onde esse mesmo singleton conter um listener. A
> idéia é semelhante ao pattern "proxy" onde vc pode centralizar todos seus
> custom events em um unico "meio de transporte".
>
> Nao gosto muito dessa tecnica, mas pode ser util em alguns casos!(ja tive q
> usa-la, e tb te poupa usar eventos borbulhados ou ter varios dispatchEvents
> desnecessários).
>
> Enfim... só mesmo tendo a ideia de eventos compreendida é q te sugiro a
> partir para algo do tipo.
>
>
>
>
> 2009/10/12 Clayton <[email protected]>
>
> [Event(name="addTelefoneEvent",
> type="fr.globalit.realtx.events.AddTelefoneEvent")] // Isto deve estar no
> form que dispara o evento e não no que escuta, ou seja no
> FormAdicionarTelefone;
>
>
> dispatchEvent(new AddTelefoneEvent(telefone,
> AddTelefoneEvent.ADD_TELEFONE_FUNCIONARIO, true)); // isto deve ser alterado
> pois está errado. Mude para:
>
> dispatchEvent(new AddTelefoneEvent(telefone, "addTelefoneEvent", true));
>
>
>
> 2009/10/12 Andre de Souza Martins <[email protected]>
>
> Ola Clayton,
>
> acho que talvez nao me expliquei direito, vamos la,
>
> vou definir melhor meu problema, tenho um componente
> FormAdicionarTelefone, ele é um titlewindow, ele sera o formulario onde o
> usuario ira digitar os dados de um telefone, e ao usuario clicar em salvar,
> este deve enviar os dados do telefone para o FormCadastrarFuncionario, estou
> tentando fazer isso via este evento,
>
> esta parte aqui:
>
> [Event(name="addTelefoneEvent",
> type="fr.globalit.realtx.events.AddTelefoneEvent")]
>
> coloquei apenas no titlewindow FormCadastrarFuncionario, que é o
> interessado em receber o evento, estou adicionando tambem o listener para o
> evento no metodo que inicializa o componente FormCadastrarFuncionario:
>
> private function inicializar():void {
> parent.addEventListener("addTelefoneEvent", addTelefone);
> }
>
> Agora vamos ao componente FormAdicionarTelefone:
>
> Neste formulario o codigo mais importante é o que dispara o evento:
>
> dispatchEvent(new AddTelefoneEvent(telefone,
> AddTelefoneEvent.ADD_TELEFONE_FUNCIONARIO, true));
>
> a parte AddTelefoneEvent.ADD_TELEFONE_FUNCIONARIO eu fiz pela seguinte
> razao, eu quero reaproveitar o evento na tela de Cadastro de Clientes, e ai
> terei o mesmo evento, porem com a constante ADD_TELEFONE_CLIENTE, assim
> daria para diferenciar os dois.
>
> o codigo do meu evento continua o mesmo, o que devo mudar?
>
>
> Abraços e obrigado pelas respostas
>
> André Martins
>
> ------------------------------
> Date: Mon, 12 Oct 2009 16:19:31 -0300
>
> Subject: [flexdev] Re: [Urgente] Disparar Eventos no Adobe Flex
> From: [email protected]
> To: [email protected]
>
> André tem alguns considerações neste seu código:
>
>
>
> //meto que atribui valores ao vo telefone...
> dispatchEvent(new
> AddTelefoneEvent(telefone,AddTelefoneEvent.ADD_TELEFONE_FUNCIONARIO,
> true));
>
> //O que está em azul substitua por "addTelefoneEvent" (com aspas), pois
> foi assim que você colocou no name do evento quando o declarou.
>
> coloquei o telefone no construtor do evento.
>
>
> no meu componente FormCadastrarFuncionario, que é o componente que deve
> receber o evento, fiz o seguinte:
> [Event(name="addTelefoneEvent",
> type="fr.globalit.realtx.events.AddTelefoneEvent")]
>
> //Neste caso o que está em azul é desnecessário pois somente irá escutar o
> evento. Isto deve estar na componente que irá disparar o evento.
>
> e no metodo que inicializa a classe...
> parent.addEventListener("addTelefoneEvent", addTelefone);
> meu handler addTelefone esta apenas mostrando um alert com o numero do
> telefone, para eu ver que o evento foi realmente disparado, mas nao esta
> funcionando ainda, preciso fazer mais alguma coisa? segue abaixo o codigo do
> meu AddTelefoneEvent
> package fr.globalit.realtx.events
> {
> import flash.events.Event;
>
> import fr.globalit.realtx.modelo.Telefone;
> public class AddTelefoneEvent extends Event
> {
> public static const ADD_TELEFONE_FUNCIONARIO:String =
> "addTelefoneFuncionario";// Desnecessário
> public var telefone:Telefone = new Telefone(); // Não precisa
> instanciar, tb não atrapalha.
>
> public function AddTelefoneEvent(telefone:Telefone, type:String,
> bubbles:Boolean=false)
> {
> super(type, bubbles);
> this.telefone = telefone;
> }
>
> }
> }
>
> 2009/10/12 Andre de Souza Martins <[email protected]>
>
> Ola Clayton,
>
> Primeiramente muito obrigado pela resposta, tentei
> implementar mas nao esta funcionando desta forma, veja como estou fazendo...
>
> no componente AdicionarTelefone eu tenho o seguinte:
>
> //meto que atribui valores ao vo telefone...
> dispatchEvent(new AddTelefoneEvent(telefone,
> AddTelefoneEvent.ADD_TELEFONE_FUNCIONARIO, true));
>
> coloquei o telefone no construtor do evento.
>
> no meu componente FormCadastrarFuncionario, que é o componente que deve
> receber o evento, fiz o seguinte:
>
> [Event(name="addTelefoneEvent",
> type="fr.globalit.realtx.events.AddTelefoneEvent")]
>
> e no metodo que inicializa a classe...
>
> parent.addEventListener("addTelefoneEvent", addTelefone);
>
> meu handler addTelefone esta apenas mostrando um alert com o numero do
> telefone, para eu ver que o evento foi realmente disparado, mas nao esta
> funcionando ainda, preciso fazer mais alguma coisa? segue abaixo o codigo do
> meu AddTelefoneEvent
>
> package fr.globalit.realtx.events
> {
> import flash.events.Event;
>
> import fr.globalit.realtx.modelo.Telefone;
>
> public class AddTelefoneEvent extends Event
> {
> public static const ADD_TELEFONE_FUNCIONARIO:String =
> "addTelefoneFuncionario";
> public var telefone:Telefone = new Telefone();
>
> public function AddTelefoneEvent(telefone:Telefone, type:String,
> bubbles:Boolean=false)
> {
> super(type, bubbles);
> this.telefone = telefone;
> }
>
> }
> }
>
> Agradecido pela ajuda!
>
> André Martins
>
> ------------------------------
> Date: Mon, 12 Oct 2009 15:23:52 -0300
> Subject: [flexdev] Re: [Urgente] Disparar Eventos no Adobe Flex
> From: [email protected]
> To: [email protected]
>
> Crie uma classe de evento para este caso extendendo de Event.
> Neste nova classe de evento que criou defina um objeto do tipo Object
> mesmo, deve ser public,por exemplo:
>
> public obj : Object;
>
> No método construtor deixe apenas como parametro o type e o bubbles,
> passando tb como parametro para o super estes dois.
>
> Pronto está criado sua classe de persolizada.
>
> Na classe,que é a janela que deve disparar o evento faça o seguinte:
>
> - logo após os imports, pode ser antes tb não faz diferença, apenas sugeri
> para organização, define o seu evento da seguinte forma:
> [Event(name="nome_do_Evento", type="o_packge.SuaClasseDeEvento")]
>
>
> quando tiver que disparar este evento:
>
> var evento : SeuEvento = new SeuEvento("nome_do_Evento",true) // o true
> define que o evento irá propagar por borbulhamento;
> evento.obj = Ojeto_Que_Ira_Para_A_Outra_Janela;
> dispachEvent(evento);
>
>
> Na janela que vc disparou adicione o listenner no parent - Isto é possível
> por causa da propagação por borbulhamento, mesmo o evento sendo disparadopor
> outro componente;
>
> parent.addEventListenner("nome_do_Evento", handler);
>
> no método handler defina oque deve ser executado.
>
>
>
> 2009/10/12 Andre de Souza Martins <[email protected]>
>
> Ola Pessoal!
>
>
> minha situacao é a seguinte, tenho duas janelas em meu
> sistema, uma onde o usuario entra alguns dados, e outra onde estes dados
> deverao ser mostrados, o que acontece, eu preciso que a janela a dispare um
> evento que a janela b possa capturar... porem isto esta sendo um problema
> para mim pois estou disparando o evento numa janela e a janela b nao
> consegue captura-lo, consegui fazer funcionar adicionando o evento no
> Application.application, mas ficou com cara de gambiarra demais pra mim,
> queria algo mais independente... se possivel claro, estou usando cairngorm,
> mas nao queria colocar estes dados no model locator, pois se trata apenas de
> um telefone... alguem poderia dar uma luz?
>
>
> Abraços Pessoal
>
> André Martins
>
> ------------------------------
> Novo Internet Explorer 8: traduza com apenas um clique. Baixe agora, é
> grátis!<http://brasil.microsoft.com.br/IE8/mergulhe/?utm_source=MSN;Hotmail&utm_medium=Tagline&utm_campaign=IE8>
>
> --
> Clayton Marques Pereira
>
>
>
> ------------------------------
> Novo Internet Explorer 8: traduza com apenas um clique. Baixe agora, é
> grátis!<http://brasil.microsoft.com.br/IE8/mergulhe/?utm_source=MSN;Hotmail&utm_medium=Tagline&utm_campaign=IE8>
>
> --
> Clayton Marques Pereira
>
>
>
> ------------------------------
> Com o Novo Internet Explorer 8 suas abas se organizam por cor. Baixe
> agora, é
> grátis!<http://brasil.microsoft.com.br/IE8/mergulhe/?utm_source=MSN;Hotmail&utm_medium=Tagline&utm_campaign=IE8>
>
>
> --
> Clayton Marques Pereira
>
>
>
>
>
> --
> Mario Junior
> Enterprise Java / Flex Architectures
> Adobe Certified Expert Flex 3 with AIR
>
> Sofshore Informática
> http://www.sofshore.com.br
> +55 (48) 3337 2003
> Rua Pastor Willian Richard Schisler Filho 452 sl 102, 88034-100 Itacorubi
> Florianopolis SC Brasil
>
>
>
> ------------------------------
> Novo Internet Explorer 8: traduza com apenas um clique. Baixe agora, é
> grátis!<http://brasil.microsoft.com.br/IE8/mergulhe/?utm_source=MSN%3BHotmail&utm_medium=Tagline&utm_campaign=IE8>
> >
>
--
Mario Junior
Enterprise Java / Flex Architectures
Adobe Certified Expert Flex 3 with AIR
Sofshore Informática
http://www.sofshore.com.br
+55 (48) 3337 2003
Rua Pastor Willian Richard Schisler Filho 452 sl 102, 88034-100 Itacorubi
Florianopolis SC Brasil
--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---