Adobe Flex, Eventos

Bom dia Pessoal,

          Estou precisando disparar eventos entre um titlewindow e outro... na verdade um titlewindow é responsavel por coletar alguns dados do usuario, e o outro deve exibir informacoes especificas sobre o mesmo, o que quero fazer entao é, disparar um evento contendo as informacoes do usuario entradas na janela a, e capturar o evento na janela b, mas quando faco o seguinte na janela a:
dispatchEvent(new AddTelefoneEvent(AddTelefoneEvent.ADD_TELEFONE_FUNCIONARIO, telefone));

nao consigo caputar o evento na janela b

addEventListener(AddTelefoneEvent.ADD_TELEFONE_FUNCIONARIO, addTelefone);

Alguem sabe como posso estar disparando um evento de uma janela para que a outra consiga captura-lo?

Abraços

André Martins

Adicione o mesmo evento listener para as duas janelas!

Não crie uma nova instância com o New, crie uma só e referencie nas duas Janelas…

EDIT: Provavelmente me confundi(Swing), não sei se o que falei é válido

Bom dia Andre,

Acredito que o problema seja em como você está adicionando o listner ou disparando o evento. Quando você cria um listner na Janela B e dispara o evento na Janela A, a Janela B não vai capturar esse evento pois ele foi disparado na Janela A somente. O ideal seria que você disparasse o evento na Janela A e capturasse ele na “Janela Pai”, onde os dois componentes se encontram. Ai da Janela Pai, você chama o método da Janela B que vai fazer o que você quer.

Um outro modo de fazer, só que meio incorreto pois dificulta a manutenção da aplicação, seria adicionar o listner e disparar o evento no pai das janelas. Usando parent.addEventListner e depois parent.dispatchEvent.

Espero ter ajudado.
[]s

Andre.

Complementando o que o Gil disse.

Imagine que os componentes de vizualização que voce inclui na sua aplicação flex são gerenciados em forma de arvore, esta arvore é chamada de display list. Ex.

->Application
----->TitleWindowA
---------->Button
---------->Form
---------->etc…
----->TitleWindowB
---------->ControlBar
---------->Panel
---------->etc.

Tendo isso em mente ajudará a intender como funciona o “Event Flow” ( Fluxo do Evento ) do flex.

Event Flow: Quando você dispara um evento, ele passa por 3 fase (Capturing, Targeting, Bubbling) nesta ordem, em cada uma destas fazes os nós da arvore (descrita acima) podem reagir de alguma maneira, ou seja, podem executar alguma tarefa/método. Durante a fase de “capturing” o evento passa por cada elemento da display list seguindo a order parent-child verificando se há algum listener até chegar no objeto que originou o evento ( ou seja, o objeto que disparou o evento). A fase de “targetting” o flex irá notificar somente os “event dispatcher’s listeners” que são os listeners que estão diretamente relacionado ao responsável por criar o evento. E por ultimo a fase “bubbling” onde o flex percorre os nós da display list na order child-parent à partir do objeto que lançou o evento até o primeiro nó da arvore executando os listeners de cada um.

Baseado na idéia de Event Flow em alguns tipos de eventos você consegue executar o mesmo listener em 3 diferentes fases. Existem algumas regras, pois nem todos eventos podem ser capiturados durante a fase de “capturing”, e nem todo objeto pode fazer listener durante a faze de bubbling. Para saber todos os detalhes vale a pena dar uma olhada na documentação da Adobe que é muito detalhada nesta parte de eventos e tirar todas as suas duvidas.

Event
Event Propagation