Se supone que la fase de bubbling de los eventos en flex es en la que el evento recorre toda la jerarquía de componentes hasta llegar a la aplicación principal, buscando listeners, pero no puedo hacer que eso pase.
Aquí el código de mi componente:
Código Flex :
<?xml version="1.0" encoding="utf-8"?> <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300" creationComplete="group1_creationCompleteHandler()"> <fx:Script> <![CDATA[ private function group1_creationCompleteHandler():void { dispatchEvent(new Event("mi_evento",true)); } ]]> </fx:Script> </s:Group>
y esta la aplicación:
Código Flex :
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="creationCompleteHandler()"> <fx:Script> <![CDATA[ import componentes.OptsWindow; import mx.managers.PopUpManager; private var ventana:OptsWindow; protected function creationCompleteHandler():void { addEventListener("mi_evento",llegaEvento); ventana = new OptsWindow(); PopUpManager.addPopUp(ventana,this); PopUpManager.centerPopUp(ventana); } private function llegaEvento(event:Event):void { // TODO Auto-generated method stub trace("llega el evento desde el componente"); } ]]> </fx:Script> </s:Application>
Pero el evento no se propaga, he visto la documentación y en todas partes dice que el bubbling debe soportar esa propagación y que flex revisa la aplicación principal a ver si hay un listener para el evento que fue disparado, no entiendo porqué no hace nada.
Nota: Yo se que puedo añadir el listener al componente y funcionará, se que puedo disparar el evento hacia el parentApplication y también funcionará, pero obviamente la intención no es esa, quiero que la aplicación pueda disparar eventos sin que sepa o le importe si hay un componente escuchando y viceversa, todo eso sin usar singletons.