2012-04-06 14 views
19

Una pregunta rápida sobre los eventos en Backbone: ¿hay alguna manera de definir un conjunto de eventos globales, que se pueden reutilizar en diferentes vistas?Backbone.js global events

Por ejemplo, supongamos que tengo varias vistas que se representan en la página. Cada Vista tiene un botón que expandirá un menú. También hay varios otros elementos y eventos genéricos. Sin poner esta lógica de eventos en cada Vista, ¿hay alguna manera de que cada una de estas Vistas pueda heredar o extraer estos eventos de una definición de eventos global? Sin duda, ahorraría tiempo y sería una solución mucho más limpia al definir estos eventos genéricos en un solo lugar.

He visto términos como Event Aggregator y Factory patterns, pero no estoy seguro del mejor enfoque (o si lograrán lo que estoy buscando).

Respuesta

51

Básicamente está describiendo un agregador o despachador de eventos, sí. Tengo un par de artículos en la construcción y el uso de ellos con Backbone:

http://lostechies.com/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js/

http://lostechies.com/derickbailey/2012/04/03/revisiting-the-backbone-event-aggregator-lessons-learned/

y hay muchos más artículos en la web para hacer lo mismo con la espina dorsal y otro pub/sub bibliotecas.

Es bastante sencillo de hacer en Backbone:


vent = _.extend({}, Backbone.Events); 

y ahora tiene un objeto vent que puede ser utilizado como un agregador de eventos a través de todas las opiniones de su aplicación y otros objetos.


vent.on("some:event", function(){ 
    console.log("some event was fired"); 
}); 

vent.trigger("some:event"); 
+3

Me he encontrado con su excelente publicación al respecto y pensé que era la solución más elegante (la revisitada más). Seguí tu artículo y está funcionando bien, gran artículo por cierto. Sin embargo, esto todavía significa que necesito especificar el grupo de eventos en cada Vista (que simplemente activan los eventos necesarios). Como cada uno de estos grupos de Vistas siempre realiza la misma tarea (un botón de agregar o editar, por ejemplo), ¿hay alguna manera de simplificar las Vistas más allá? – crawf

+0

Para su información, parece que su dominio lostechies.com está redirigiendo automáticamente a https, pero está intentando cargar los fragmentos de código de GitHub sobre http y bloquearse. –