var test = { }
$(test).on("testEvent", function(){
console.log("testEvent has fired");
});
$.event.trigger("testEvent");
Estoy tratando de usar jQuery para hacer un mecanismo de publicación/suscripción utilizando eventos. Necesito poder adjuntar eventos a objetos que no sean DOM y poder hacer que todos disparen desde un único disparador global. Esperaba que el código anterior funcionara, pero no dio como resultado la activación de testEvent para el objeto de prueba.
Tenga en cuenta que habrá múltiples objetos a los que se suscribirá un evento. Un único $ .event.trigger debería desencadenar todos esos eventos.
Ten en cuenta que este código funciona bien:
$('#someID').on("testEvent", function() {
console.log('testEvent has fired from DOM element');
})
$.event.trigger("testEvent");
El motivo por el que el evento no se activa es porque el objeto no forma parte del DOM. Cuando disparo $ .event.trigger, enciendo el evento y burbujeo hacia arriba a través del DOM. Viendo que el objeto no es parte del DOM, no se dispara. Lo que realmente estoy buscando aquí es de alguna manera disparar eventos dentro de objetos que no son DOM globalmente usando jQuery. Estoy tratando de evitar tener que usar algo como AmplifyJS para lograr esto. – crv
La única manera de activar el evento que ha publicado es con '$ (test) .trigger (" testEvent ");'. –
Si no pasa un elemento a '$ .event.trigger' y el evento que se desencadena no es un evento global, no activará un evento. Vea el bloque de código que comienza en la línea 3104 de http://code.jquery.com/jquery-1.7.2.js. Dado que este es un método no documentado, tenemos que ir al código para ver qué hace. –