2011-10-20 7 views
22

Tengo una vista principal y dentro de esa vista principal tengo otra vista que se crea cuando hago clic en un botón. ¿Hay alguna manera de escuchar un evento personalizado en la vista principal para un evento que se dispara desde la vista secundaria? Intenté hacerlo a través de la propiedad el usando el activador jQuery, pero eso no funcionó.desencadenar un evento de una vista a otra en la red troncal

+1

Un pequeño código de ejemplo ayudaría. – erturne

Respuesta

43

Ya, no hay problema ... querrá usar el patrón "Event Aggregator". Es 1 línea de código en Backbone:

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

Ahora puede usted activar/vinculación a eventos de este objeto, en todas partes en su aplicación, y tienen las diferentes partes de su aplicación se comunican entre sí de una manera desacoplada .

¡Utilizo esto MUCHO!

también blogged más sobre él aquí: http://lostechies.com/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js/

+14

+1. Doy un paso más e inyecto el agregador de eventos en cada vista: 'Backbone.View.prototype.eventAggregator = _.extend ({}, Backbone.Events);'. Al hacer eso, cada vista obtiene el agregador de eventos cada vez que se construye. –

+3

¿No es su agregador de eventos simplemente un "modelo de estado de vista" simplificado? ¿No vería 'viewModel = new Backbone.Model()' por más elegante? Al menos de esa manera, las vistas dispares podrían vincularse a * cambios * en el modelo de vista, en lugar de eventos arbitrarios. Ej 'viewModel.bind ('change: selectedFoo', aView.render)' vs 'eventAgg.bind ('selectedFooChanged', aView.render)'. ¿Pensamientos? –

+2

@crescent fresh - no. un modelo tiene un significado semántico, siendo una representación con estado de alguna entidad. tiene atributos y métodos que manipulan esos atributos. un agregador de eventos es un objeto sin estado que solo coordina partes del sistema, a través del uso de eventos, lo que permite una arquitectura más desacoplada. http://martinfowler.com/eaaDev/EventAggregator.html –

2

Aquí hay otro enfoque, que podría ser más intuitivo para las personas que están buscando una manera simple de "burbuja" eventos arriba de un niño, vista a una vista padre :

https://github.com/dgbeck/backbone.courier

Hay una cierta discusión en el readme cómo se compara con los agregadores de eventos.

0

No es necesario rolar su propio "agregador de eventos" o mediador o pubsub (tan fácil como se describe arriba) ya que el Backbone mezcla el objeto Events directamente al objeto Backbone en su espacio de nombres. Aquí hay un link al código fuente y su documentación sobre la implementación.

Permita que el objeto Backbone sirva como un bus de eventos global, para las personas que desean un "pubsub" global en un lugar conveniente.

Cuestiones relacionadas