Comunidad de diseño web y desarrollo en internet online

Problema eventos propios en Flex

Citar            
MensajeEscrito el 21 Jul 2009 03:36 pm
Buenasss!!

Tengo un problema con esto de los eventos. Creo un listener de evento al iniciar la aplicación: this.addEventListener(Evento.CARGAR, completo);
Y luego desde otro archivo cuando tengo los datos que quiero representar lanzo el evento:
dispatchEvent(new Event(Evento.CARGAR));

En el handler "completo" no entra nunca y no sé que hacer..

Un saludo!!

Por hidrogeno

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Jul 2009 04:17 pm
Supongo que Evento es una clase que extiende de Events, y que entonces deberías hacer

dispatchEvent(new Evento(Evento.CARGAR));

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 Jul 2009 06:02 pm
En el caso que he puesto Evento no extiende de nada por eso he puesto Event. He probado a hacer que la clase Evento extienda de Event y cambiar lo que dices pero tampoco funciona. He hecho una miniaplicación sólo con este evento para ver como funciona porque tengo la aplicación que estoy haciendo y para trabajar con los eventos de Flex no tengo problema porque funcionan correctamente pero cuando creo un solo evento propio no hace nada... Hay que hacer algún tipo de configuración externa o algo para habilitar los eventos?? :shock:

Por hidrogeno

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Jul 2009 06:08 pm
Voy a poner el código para que se vea más claro. Es una aplicación básica para ver el comportamiento de un evento propio. El listener se lanza en el mxml y el evento se lanza en un archivo interno.
Prueba.mxml:

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

<mx:Script>
   <![CDATA[
      import caso.Control;
      import caso.Evento;
      import mx.controls.Alert;
      
      public function completo(ev:Event):void{
         Alert.show("hoooola");
         
      }
      
      public function envio():void{
         var c:Control = new Control();
         this.addEventListener(Evento.CARGAR, completo);
         c.mensaje(texto.text);
      }
      
   ]]>
</mx:Script>
   <mx:Button id="boton" x="345" y="104" label="Button" width="172" height="34" click="envio()"/>
   <mx:TextInput id="texto" x="84" y="104" width="231" height="34"/>

</mx:Application>

[b]Control.as[/b]
package caso {
   import flash.events.EventDispatcher;
   
   public class Control extends EventDispatcher{
      
      public function Control(){
      }
      
      public function mensaje(cad:String):void{
         dispatchEvent(new Evento(Evento.CARGAR));
      }
   }
}

[b]Evento.as[/b]
package caso {
   import flash.events.Event;

   public class Evento extends Event{
      
      public static const CARGAR:String = "cargar";
      public function Evento(type:String, bubbles:Boolean=false, cancelable:Boolean=false){
         super(type, bubbles, cancelable);
      }
   }
}

Por hidrogeno

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Jul 2009 06:24 pm
Cambia esta línea:

this.addEventListener(Evento.CARGAR, completo);

por

c.addEventListener(Evento.CARGAR, completo);

Ya que es la instancia de control la que tienes que escuchar

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 Jul 2009 10:23 pm
Hola!!
Es correcto!! Al cambiar esa línea funciona correctamente!!! Muchas gracias!!!
El problema viene ahora... en el proyecto grande el flujo del programa pasa por 3 clases desde que se lanza el listener hasta que se lanza el evento y entonces no llama al handler...

Por hidrogeno

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Jul 2009 10:49 pm
usa alguna clase intermedia para pasar paramentros

Por xcom

Claber

530 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Jul 2009 06:38 am

hidrogeno escribió:

El problema viene ahora... en el proyecto grande el flujo del programa pasa por 3 clases desde que se lanza el listener hasta que se lanza el evento y entonces no llama al handler...

Si lo que quieres evitar es hacer una "cadena de addEventListener--DispatchEvent" que sería la opción a priori, Zguillez se marcó una Clase que extendía de eventDispatcher siguiendo un patrón singleton
Echalé un vistazo y nos cuentas

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Jul 2009 10:23 pm
Buenasss!!

Pues me ha venido muy bien esa explicación!! He utilizado la clase que extiende de EventDispatcher siguiendo un patrón Singleton y ha funcionado!! Muuuchas gracias!!! Además no se añade mucho código y no tienes que encadenar eventos lo cual me iba a llevar un tiempo e iba a ser muy engorroso. Código limpio y conciso :P

Por hidrogeno

5 de clabLevel



 

firefox

 

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