Entradas con la etiqueta ‘emitir’

JS – Emitir eventos con EventTarget

Publicado por Iván Gajate el 4 de diciembre de 2020 en Desarrollo Web, Eventos, JavaScript | Los comentarios están cerrados.

Con esta API relativamente nueva de JavaScript podemos hacer que nuestros propios objetos emitan eventos como lo haría un elemento nativo del DOM.

La definición es un poco escueta, pero es que es tan simple de usar que parece mentira ;p

https://developer.mozilla.org/en-US/docs/Web/API/EventTarget

// MyClass.js
class MyClass extends EventTarget {
    myMethod() {
        this.dispatchEvent(new CustomEvent('my-custom-event', {
            detail: 'Contenido que se envía en el evento'
        }));
    }
}

// Para usarlo
const myObject = new MyClass();
myObject.addEventListener('my-custom-event', (event) => {
    console.log(event); // Evento completo con el detail
});

Emitir eventos personalizados en AS3 (II)

Publicado por Iván Gajate el 22 de noviembre de 2008 en AS3, Flash, Tutoriales | 12 comentarios »

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