Comunidad de diseño web y desarrollo en internet online

no me funciona el bubbling de eventos en flex

Citar            
MensajeEscrito el 19 Abr 2011 10:01 pm
Hola,

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.

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 20 Abr 2011 07:32 am
Hola,
no todos los eventos "burbujean". Creo que sólo burbujean los que implican que el componente ya está en la lista de visualización, así que prueba con added en lugar de creationComplete. De todos modos en la ayuda de cada uno de los eventos vienen los que tienen fase de burbujeo y los que no.

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 20 Abr 2011 06:02 pm
se supone que el evento genérico puede hacerlo si se le da la opción, por eso el

Código ActionScript :

new Event("mi_evento",true)

el "true" es para que haga bubble, y probé con un botón y tampoco funcionó así que no es problema del creationcComplete

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 20 Abr 2011 08:20 pm
Bubling implica que atraviesa el displayList, pero si no te has registrado como interesado, y si aludiendo al componente y no a la nada, nunca lo escucharas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Abr 2011 03:57 am
precisamente, registrar el listener directamente va en contra del concepto de bubbling, si yo hago un listener para un clickEvent en la aplicación, capturaré TODOS los clicks que pasen dentro sin tener que registrarlo específicamente, si me dan la opción de decirle "true" a un evento genérico, pues debería funcionar de la misma manera.

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 21 Abr 2011 06:45 am
En efecto, el detalle tiene que ver con que los popupmanagers no dejan pasar los eventos, todo lo que está dentro de un popupmanager se refiere al systemManager, no a la aplicación principal, así que basta con cambiar

Código ActionScript :

addEventListener("mi_evento",llegaEvento);
por

Código ActionScript :

this.systemManager.addEventListener("mi_evento",llegaEvento,true);
y listo, ahora puedo escuchar eventos en la aplicación sin que me importe de donde proviene :D

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.