2011-05-16 8 views
16

Estoy buscando una biblioteca de JavaScript que me permita usar eventos personalizados a los que me pueda suscribir e iniciar. También necesito que el nombre/alcance del evento funcione de manera similar al de los temas en una cola de mensajes, donde puede suscribirse a un espacio de nombres y obtener todos los eventos para ese espacio de nombres.Biblioteca de eventos personalizados para JavaScript. ¿Hay alguno? Recomendaciones?

Por ejemplo,

var myCustomEventHandler = new CustomEventHandler(); 

myCustomEventHandler.bind('my.event', function(data) { console.log('Event 1'); }); 
myCustomEventHandler.bind('my.other.event', function(data) { console.log('Event 2'); }); 
myCustomEventHandler.bind('my.*', function(data) { console.log('Event 3'); }); 

myCustomEventHandler.trigger('my.event'); 
// Logs "Event 1" and "Event 3" 

myCustomEventHandler.trigger('my.other.event'); 
// Logs "Event 2" and "Event 3" 

myCustomEventHandler.trigger('my.something.else'); 
// Logs "Event 3" 

podría escribir algo costumbre, pero yo prefiero usar una biblioteca de código abierto si es que existe.

Saludos.

Respuesta

13

YUI 2 has something like that, supongo que YUI 3 también, pero no lo he visto con suficiente detalle como para saberlo todavía. EventEmitter parece cubrir al menos algunos de sus requisitos, y es mucho más pequeño. Algunas de las otras bibliotecas en microjs events pueden ser prometedoras también.

+3

EventEmitter es muy agradable, y como dijiste lo más parecido a lo que estoy buscando. Podría hacer una bifurcación y ver qué fácil es hackear el requisito de espacio de nombres. –

+1

YUI 3 [Event Target] (http://yuilibrary.com/yui/docs/event-custom/) es realmente agradable. –

+0

Hay docenas de ellos en microjs ... – Yaroslav

1

Probar RxJS.

Esto expone el poder de las extensiones reactivas y Linq en el Javascript. Ejemplo:

this.searcher = $(me._textboxSelector) 
     .toObservable("keyup") 
     .Select(function (_) { 
      return $(me._textboxSelector).val(); 
     }) 
     .Where(function (str) { 
      if (me._madeSomeHiding && str.length < me._minStringLength) { 
       $(me._itemsSelector).show(); 
      } 

Esto permite crear un filtro en una lista. Entonces puede decir si el usuario tipeó 2 caracteres y se detuvo durante 250 ms y luego hizo algo.

4

También recomendaría echar un vistazo a js-signals

Aquí es un ejemplo básico de su sitio:

//custom object that dispatch a `started` signal 
var myObject = { 
    started : new signals.Signal() 
}; 
function onStarted(param1, param2){ 
    alert(param1 + param2); 
} 
myObject.started.add(onStarted); //add listener 
myObject.started.dispatch('foo', 'bar'); //dispatch signal passing custom parameters 
myObject.started.remove(onStarted); //remove a single listener 
8

Salida bean. Es impresionante.

+0

Parece la mejor solución, ya que todos los demás propuestos vienen como * partes de grandes sistemas *, y eso sería excesivo. –

+0

Impresionante. ¡Gracias! – psulek

0

Trate KeyderJS:

Keyder(document.getElementById("my_element")).click(function(){ 
    alert("Mouse button pressed"); 
}, function(){ 
    alert("Mouse button released"); 
}); 
-1

Me gustaría también sugieren KeyderJS ya que es un "simple pero potente biblioteca de JavaScript". Encontré y todavía lo encuentro muy útil. Hace que mi codificación sea más fácil. También tiene mucha compatibilidad con el navegador.

Además, no es necesario saber que JavaScript es muy bueno para usarlo, y usted puede ser un novato o experto en JavaScript para usarlo.

1

Tuve el mismo problema en un día, así que creé una biblioteca muy pequeña para ayudarme con los eventos. Compruébalo, quizás lo encuentres útil.

https://github.com/anvk/Events.js

var events = new utils.Events(); 

var callback1 = function() {...}; 
var callback2 = function(arg1, arg2) {...}; 

events.on('event A', callback1); 
events.on('event B', callback2); 

events.emit('event A'); 
events.emit('event B', [var1, var2]); 
0

Un poco tarde, pero que podría estar interesado en https://github.com/asyncly/EventEmitter2

partir de la descripción:

CARACTERÍSTICAS

Namespaces/Wildcards. 
Times To Listen (TTL), extends the once concept with many. 
Browser environment compatibility. 
Demonstrates good performance in benchmarks 
0

Una biblioteca de eventos de JavaScript para todo lo que ofrece jQuery events sin jQuery.

https://github.com/AtheistP3ace/jAwn

vieja pregunta, pero aquí es algo que arme para uso personal pero básicamente tomó jQuery e hizo un encargo de la estructura de sus cosas solamente eventos. Despojado de Sizzle y todo lo demás que te fuerzan incluso con una compilación de eventos personalizada.

Eso lo deja solo con el código de evento específico y el almacenamiento en caché (que es necesario para los eventos). Este código se ha actualizado con todas las últimas 3.0 actualizaciones de jQuery y correcciones de errores. Solo se puede garantizar que funcione con los navegadores compatibles con jQuery 3.0 (https://jquery.com/browser-support/). En general, el archivo min es de 13kb y es compatible con todo lo que jQuery puede hacer con los eventos. Espacios de nombres, eventos personalizados, eventos directos y delegados, datos pasados, eventos desencadenantes, lo que sea.

Lea los documentos. Es bastante simple. Funciona solo como jQuery, en lugar de invocar, desactivar, desencadenar y tal en un objeto jQuery, pasa los elementos como primer argumento.

Como dije antes, hice esto para uso personal, por lo que no es un proyecto que soporte y actualice constantemente, pero intento mantenerlo actualizado para mis propios usos y asegurarme de que tenga las últimas correcciones. Lo he usado durante años en múltiples proyectos y funcionó muy bien. Recientemente lo puse en GitHub por si otros lo encontraban útil.

Cuestiones relacionadas