Continua o teste:
3. cria um botão que dispara um evento qualquer...
bt.addEventListener(MouseEvent.CLICK, dispacthMyEvent);
function dispacthMyEvent(evt:MouseEvent):void{
//container.dispatchEvent(new Event("MY_EVENT", true)); //
myEventPhase- phase: 2, target: container
//container.cchild.dispatchEvent(new Event("MY_EVENT", true)); //
myEventPhase- phase: 3, target: cchild
}
4.faz o container se registrar com esse evento:
container.addEventListener("MY_EVENT", myEventPhase);
function myEventPhase(evt:Event):void{
trace("myEventPhase- phase: "+evt.eventPhase+", target:
"+evt.target.name)
}
Veja as saídas da função "dispacthMyEvent". Se o próprio container
disparar, então ficas na fase 2. Se o cchild disparar, vai para fase
3, porque quem está registrado é o container. Assim, para chegar no
cchild, ele tem que "borbulhar", ou seja, tem que continuar se
propagando.
E quanto a tua pergunta "Mas então... os listeners são chamados duas
vezes?". A função será chamada uma vez só. Podes ver em todos estes
testes.
Outra conclusão interessante que se pode chegar é que, apesar de o
parâmetro bubles sera false por padrão, os eventos disparados pelo
Flash Player "borbulham". Tente uma última coisa: registre seu
Application (eu estou no Flash, com stage, mas deve ser a mesma coisa)
com o "click" e clique em qualquer objeto. Ele deve responder. Se isso
acontece, é porque o evento está na bubbling phase.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---