Ya vimos que se pueden emitir eventos personalizados para recogerlos con un listener, no tenemos que limitarnos a los que trae Flash por defecto.
Ahora vamos a dar un paso más. Queremos emitir un evento que diga que se ha terminado una acción, pero además queremos indicar si ha ido bien (true), o ha ido mal (false).
Este es el evento que queremos emitir:
dispatchEvent(new EventExtra("accionTerminada", true));
Creamos un nuevo evento de tipo EventExtra donde le indicamos el nombre del evento que queremos emitir y los parámetros que queramos, que para eso es nuestro evento
Vamos a ver la clase EventExtra:
package {
import flash.events.*;
// Extiendo la clase Event para que funcione como un evento mas al enviarse y recibirse.
public class EventExtra extends Event{
public var exito:Boolean;
public function EventExtra(nombre:String, exito:Boolean=true){
// Inicializo el constructor de Event
super(nombre);
// Guardo el valor de exito en una variable para poder acceder luego a ella.
this.exito = exito;
}
}
}
No tiene nada especial, es un envoltorio de la clase Event pero recibe un parámetro extra que almaceno para luego poder acceder a su valor.
Así es como se recogería nuestro evento, con un listener, como siempre en AS3:
// Escucho si objetoEmisor emite el evento "accionTerminada" y le indico su detector de eventos.
objetoEmisor.addEventListener("accionTerminada", detectorAccionTerminada)
// El detector del evento, recibe un objeto evento de tipo EventExtra
function detectorAccionTerminada(evento:EventExtra):void{
// Como tengo una referencia al evento, puedo acceder a sus variables publicas (exito).
trace(evento.exito)
}
Leer el resto de esta entrada