Comunidad de diseño web y desarrollo en internet online

disparar eventos en el constructor

Citar            
MensajeEscrito el 22 Sep 2009 02:51 pm
Hola,
como puedo disparar un evento inmediatamente al crear un objeto?, es decir sin utilizar la linea 3

clase del documento:

Código ActionScript :

1--  var prueba1:PruebaEventos = new PruebaEventos();   
2--  prueba1.addEventListener('Fin', prueba);
3--  prueba1.forzar();


otra clase:

Código :

package  prueba{
   import flash.display.*;
   import flash.events.*;
   import flash.net.*;
   import flash.text.*;
   import flash.system.Capabilities;
   
   public class PruebaEventos extends EventDispatcher{   
      
      public function PruebaEventos(){         
         /*dispatchEvent se ejecuta despues de haberle asignado el listener (addEventListener)
         ya que al crear un objeto PruebaEventos(1) como no existe listener (aun estamos en 1 y el listener se crea en el 2) no se ejecuta. En 3 si que se ejecuta*/
         
                        dispatchEvent(new Event("Fin")); //dentro del contructor no funciona tiene que ser en un metodo
         forzar(); //asi tampoco funciona         
      }   
      public function forzar(){             
         dispatchEvent(new Event("Fin"));          
      }   

   }   
}  


Saludos.

Por oscarlosan

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Sep 2009 04:29 pm
Dispatchar el evento sí que puedes, lo que no hará es "capturarlo". Vale, perdona la broma.
La verdad es que no sé muy bien lo que quieres hacer.

Si lo que quieres es que, cuando se añada al stage -cuando se haga un addChild del objeto- se dispatche el evento. Para ello no haría falta más que añadir el evento ADD_TO_STAGE al constructor de PruebaEventos

Código ActionScript :

public function PruebaEventos() extends DisplayObject{
         addEventListener(Events.ADD_TO_STAGE,lanzarEvento)
         //si queremos llamamos a la función "init"
         init();
}
private function init(){
        removeEventListener(Events.ADD_TO_STAGE,lanzarEvento)
         ...aquí podemos inicializar nuestro Objeto PruebaEventos...
}
private function lanzarEvento(e:Event){
       ...o aquí, según queramos...
       dispatchEvent(new Event("Fin"));
}


Si no, tendrás que añadir el evento a algo que ya tengas y dispatcharlo sobre ese mismo

Código ActionScript :

package  prueba{
   import flash.display.*;
   import flash.events.*;
   import flash.net.*;
   import flash.text.*;
   import flash.system.Capabilities;
   
   public class PruebaEventos extends EventDispatcher{   
      
      public function PruebaEventos(mc:DisplayObject){         //le paso como argumento "algo"
             mc.addEventListener("Fin",forzar)
             mc.dispaltchEvent(new Event("Fin");
      }   
      public function forzar(){             
         dispatchEvent(new Event("Fin"));          
      }   

   }   
}  

Claro que el constructor será algo como

Código ActionScript :

var prueba1:PruebaEventos = new PruebaEventos(this);    //<--por ejemplo uso "this"


Me parece algo farragoso, así que ¿por qué no usar la "tercera línea" que has puesto?

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Oct 2009 12:07 pm
vale simplemente me queria ahorrar una linea de codigo, pero visto lo visto. Mejor poner la 3 línea
Muchas gracias Eliseo2.

Por oscarlosan

73 de clabLevel



 

firefox

 

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