Comunidad de diseño web y desarrollo en internet online

Mejor forma de usar EventListeners ?

Citar            
MensajeEscrito el 23 Ene 2011 07:30 pm
Hola. He visto en algunos códigos ejemplo, que algunos usan una misma función como event listener para un mismo evento incluso si su target es un diferente objeto. Por ejemplo:

Código ActionScript :

function clickListener(e:MouseEvent){
   if (e.target == btn1){trace("BOTON 1"); return;}
   if (e.target == btn2){trace("BOTON 2"); return;}
   if (e.target == btn3){trace("BOTON 3"); return;}
}

btn1.addEventListener(MouseEvent.CLICK, clickListener);
btn2.addEventListener(MouseEvent.CLICK, clickListener);
btn3.addEventListener(MouseEvent.CLICK, clickListener);


No estoy muy seguro de si esto realmente es lo que se suele hacer, porque si hay varios objetos, me parece que el código se vuelve muy ineficiente por la cantidad de condiciones que debe evaluar. Sin embargo, supongo que, de cierta forma, ayuda a mantener todo lo relacionado a clicks dentro de una misma función, tal vez sea más ordenado? Qué opinan? Me recomiendan usarlo?

Por sprom

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Ene 2011 07:57 pm
BuenAS:

Suele depender del caso. Si las acciones a realizar son bastante diferentes sería mas conveniente utilizar un método controlador para cada botón. Sin embargo, si hay tareas comunes puede convenir centralizar todo el código en una sola función (por ejemplo, que la botonera sirva para cargar swf's, y siempre, antes de cargar uno nuevo haya que elimininar listeners y descargar el antiguo, etc.)

Otra situación en la que se puede optar por sólo una función, si tienes una forma rápida de ejecutar el código, por ejemplo tu botón tiene una propiedad en la que se guarda la url que se va a abrir:

Código ActionScript :

function clickHandler(event:MouseEvent):void
{
   var button:MyButton = MyButton(event.target);
   loader.load(button.url);
}


Siento no solucionarte mucho, yo suelo utilizar lo que más rápido o claro me resulte. Muchas veces más que buscar la solución más óptima, me decanto por la más clara, para que cuando vuelva a este código no lo encuentre demasiado críptico.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 25 Ene 2011 10:38 pm
Pues yo creo que la mejor forma es centralizar todo el código dentro de un handler principal (Siempre y cuando sean símiles los códigos).

Yo tiendo a hacer algo así:

Código ActionScript :

private function handlerEventButtons(e:Event):void{
   switch(e.currentTarget){
      case btn_nav_principal:
         // ALGO
      break;
   }
}


También confieso que en botones que necesito solo el ID, lo extraigo directo del nombre:

Código ActionScript :

private function handlerEventButtons(e:Event):void{
   var ID:Number = Number(e.currentTarget.substr(e.currentTarget.indexOf("btn_")));
   switch(ID){
      case 0:
         // Código Particular
      break;
   }
   // Código General
   doAction(ID);
}


Algo así XD

También es aconsejable que sepas usar los demás parámetros del listener, sería correcto hacer esto para un botón:

Código ActionScript :

btn1.addEventListener(MouseEvent.CLICK, clickListener,false,0,true);


De esa forma puedes controlar mucho mejor tus métodos y anexar nuevas métodos de ser necesario.

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

chrome

 

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