Pub/Sub con Backbone.js en objeto global

En Backbone tenemos muchos eventos, en vistas, en modelos, en colecciones, y personalizados.

Y mucho se habla sobre el patrón del observador (del inglés oberver), de propagación en burbuja de eventos hacia el padre.

Pero, ¿qué pasa cuando tienes que dos componentes independientes uno del otro? Es decir, nada de eventos que van de hijo a padre.

Aunque hay varias soluciones, una de las más simples es utilizar le objeto global Backbone y utilizarlo como bus de datos.

Para ello, contamos con dos funciones:

  1. Backbone.trigger(nombreEvento, argumentos)
  2. Backbone.on(nombreEvento, funcionCallback[, contexto])

Así pues, podemos emitir el evento desde un componente:

Concepto = Backbone.Model.extend({
    actualizarBasePorImporte: function () {
        Backbone.trigger('actualizar:subtotal');
    },
});

Y escuchar por ese mismo evento en otro componente totalmente independiente:

Comprobante = Backbone.Model.extend({
    initialize: function (attributes, options) {
        Backbone.on('actualizar:subtotal', this.actualizarSubtotal, this);
    }
});

De esta forma, podemos utilizar un bus global sin crear más objetos, y seguimos respetando el patrón de pub/sub.

Por supuesto, este método sólo funciona si no hay muchos eventos que escuchar.



Deja un comentario