2011-10-20 11 views
22

Ho una vista principale e all'interno di quella vista principale ho un'altra vista che viene creata quando faccio clic su un pulsante. C'è un modo per ascoltare un evento personalizzato nella vista genitore per un evento che viene generato dalla vista figlio. Ho provato a farlo attraverso la proprietà el usando trigger jQuery ma non ha funzionato.attiva un evento da una vista a un'altra in backbone

+1

Un piccolo esempio di codice potrebbe essere d'aiuto. – erturne

risposta

43

Ya, nessun problema ... ti consigliamo di utilizzare il modello "Event Aggregator". E '1 riga di codice nel Backbone:

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

Ora si può attivare/legano a eventi da questo oggetto, ovunque nella vostra app, e hanno le diverse parti della vostra applicazione comunicano tra loro in modo disaccoppiato .

Io uso questo molto!

Ho anche blogged più qui: http://lostechies.com/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js/

+14

+1. Faccio un ulteriore passo avanti e inserisco l'aggregatore di eventi in ogni vista: 'Backbone.View.prototype.eventAggregator = _.extend ({}, Backbone.Events);'. Facendo ciò, ogni vista ottiene l'aggregatore di eventi ogni volta che viene costruita. –

+3

Il tuo aggregatore di eventi non è semplicemente un "modello di stato di visualizzazione" semplificato? 'ViewModel = new Backbone.Model()' non sarebbe più elegante? Almeno in questo modo le viste più disparate potrebbero legarsi a * modifiche * nel modello di vista, piuttosto che eventi arbitrari. Ad esempio 'viewModel.bind ('cambia: selectedFoo', aView.render)' vs 'eventAgg.bind ('selectedFooChanged', aView.render)'. Pensieri? –

+2

@crescent fresh - no. un modello ha un significato semantico, essendo una rappresentazione statica di qualche entità. ha attributi e metodi che manipolano quegli attributi. un aggregatore di eventi è un oggetto stateless che coordina solo parti del sistema, attraverso l'uso di eventi, consentendo un'architettura più disaccoppiata. http://martinfowler.com/eaaDev/EventAggregator.html –

2

Ecco un altro approccio, che potrebbe essere più intuitivo per le persone che sono alla ricerca di un modo semplice per "bolla" eventi fino da una vista del bambino ad una vista primaria :

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

V'è una certa discussione nel readme su come si confronta con gli aggregatori di eventi.

0

Il rolling del proprio "aggregatore di eventi" o mediatore o pubub (come facile come descritto sopra) non è necessario poiché Backbone si mescola nell'oggetto Eventi direttamente all'oggetto Backbone nel loro spazio dei nomi. Ecco uno link per il codice sorgente e la loro documentazione sull'implementazione.

Consentire all'oggetto Backbone di servire come un bus di eventi globale, per le persone che desiderano "pubsub" globali in un luogo conveniente.

Problemi correlati