Olhem só...

<pai tem um listener do tipo filho.addEventListener>
  <filho dispara evento>

Nesse caso - o mais comum - funciona. Nem precisa de bubbling.
Segundo caso:

<A tem um listener do tipo THIS.addEventListener>
  <B>
    <C dispara evento>

Para o A escutar o evento de C, o evento precisa ser disparado com
bubbles=true. Assim funciona tb.


Agora, pelo oq eu entendi da duvida original, o amigo quer fazer:

<A dispara evento>
  <B tem um listener q escuta o evento de A>


Como a Gabi já bem explicou, isso "naturalmente" NÃO funciona pq os eventos
não "descem" a cadeia... só sobem.
Dai vem a sugestao do Clayton, que seria + ou -  assim:

<A dispara evento>
  <B tem um this.parent.addEventListener>

Nesse caso, o B vai ouvir o evento pq o parent no caso é a mesma instancia
do objeto A. Na verdade, não é o B quem escuta... é o A, mas dentro do
escopo do B. Isso funciona, mas eu  - particularmente - nao gosto pq gera
alto acoplamento.


Já a idéia de um "Proxy Event" (oq eu sugiro para esses casos, *mas só qnd
realmente são necessários*) é q vc tenha um objeto singleton que extenda de
EventDispatcher para entao *ele próprio adicionar listeners e disparar
eventos* simultaneamente.


Dessa forma, esse seu objeto pode ser colocado em qualquer lugar da
aplicacao, e como a instancia será sempre a mesma (daa.. singleton né :D) os
eventos podem ser disparados e ouvidos em qualquer lugar.

Isso tb gera acoplamento, do mesmo nivel do parent, mas já te dá mais poder
uma vez q vc pode subir e descer tantos níveis qnt quiser.


O Mário Santos tinha um post sobre algo parecido, só nao achei o link para
postar aqui, mas o conceito é simples de entender e fácil de implementar.


Espero q tenham compreendido - to de ressaca das ferias ainda e meio
preguiçoso... hehehe...


Abraços.





2010/1/18 Pergentino Araújo <[email protected]>

> Não seria apenas o bubble ser true ?!
>
> []'s
>
> 2010/1/16 Mário Júnior <[email protected]>
>
> Entao... "o filho fique escutando um evento" resume-se em adicionar o
>> listener no filho, e nao no parent. Enfim, sua sugestao tb daria certo, mas
>> eu usaria um singleton que dispara o evento e q tb ouça o proprio evento,
>> criando assim a ideia de um "ProxyEvent"... dessa forma vc consegue disparar
>> e ouvir os eventos pelo proxy de qualquer lugar e em qualquer ordem.
>>
>>
>> []s
>>
>>
>>
>>
>> 2010/1/16 Clayton <[email protected]>
>>
>>> Até concordo com você, mas respondendo à solicitação do Fabio, que pra
>>> mim foi clara quando ele escreveu:
>>>
>>> "Amigolhes e possivel eu propagar um evento de pai para um filho?? *eu
>>> quero que o meu filho(component) fique escutando um evento,"*
>>>
>>> Por isso a minha sugestão.
>>>
>>>
>>>
>>> 2010/1/16 Gabriela Trindade Perry <[email protected]>
>>>
>>>> Mas ele não tem que propagar do pai para o filho? Porque registrar no
>>>>
>>>> nivel ainda mais acima? Não entendi mesmo...
>>>>
>>>> Pelo que ele falou, ele quer registrar o evento no pai (e não no
>>>> filho, como parece que sugeriste) e o filho iria responder...
>>>>
>>>> private function initApp():void{
>>>>   bt.addEventListener("TESTE", function():void{ trace("OUVIU") });
>>>> }
>>>>
>>>> <mx:Canvas click="{dispatchEvent(new Event('TESTE',whatever)); trace
>>>> ('DISPAROU')}">
>>>>
>>>> <mx:Button
>>>> id="bt"
>>>> label="filho"/>
>>>>
>>>> </mx:Canvas>
>>>>
>>>> O evento não desce....
>>>>
>>>> Agora, se ele tem a liberdade de registar o evento onde bem entende
>>>> (que é uma assunção que eu nunca faço)... Mas como ele falou, só
>>>> conseguiu fazer o contrário (o Button avisar o Canvas, porque o evento
>>>> estaria na fase 3).
>>>>
>>>> --
>>>> 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
>>>>
>>>
>>>
>>>
>>> --
>>> Clayton Marques Pereira
>>>
>>> --
>>> 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
>>>
>>
>>
>>
>> --
>> 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
>>
>
>
>
> --
> Atenciosamente, Pergentino Araújo.
> Arquiteto Java/Flex
> MSc. Profissional - Engenharia de Software
>
> Adobe Certified Expert - Flex 3 with AIR
>
> --
> 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
>



-- 
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

Responder a