2012-06-25 17 views
5

Uso backbone.js e ho un modello senza collezione. Nella vista chiamo il recupero sul modello con un callback per rendere la vista.visualizzazione aggiornamento automatico in backbone.js

this.user.fetch({success: function(d) { self.randomUserView.render() }}) 

Come posso aggiornare automaticamente la vista al cambio di modello? per esempio. Non voglio specificare la richiamata sopra ogni volta che chiamo fetch. Ho provato a legare la vista a molti eventi del modello durante l'inizializzazione, ma questo non ha funzionato.

risposta

12

Nella visualizzazione, aggiungere un gestore di eventi per il modello della vista:

initialize: function() { 
    this.model.on('change',this.render,this); 
} 
+0

È "modifica" o "aggiungi" a seconda che questo modello sia già stato caricato o meno. Ma in genere si usa fetch() per caricare nuovi modelli, quindi ti iscrivi a "aggiungi". –

+1

potresti giocare sul sicuro e andare con 'this.model.bindAll (this.render)', assumendo che tu stia bene con il rendering della vista su ogni evento del modello. – jackwanders

1

Backbone è event-driven, non richiamata quadro guidato (anche se tecnicamente sono callback). E il tuo approccio non sembra essere nativo di Backbone. Quando esegui il recupero(), il modello utente attiverà automaticamente l'evento "aggiungi". Tutto quello che dovete fare è nella vista corrispondente aggiungere questo in inizializzazione:

initialize: function() { 
    ... your code... 
    this.model.bind('add', this.render); 
} 

In questo modo si iscriverti a questo, anche una sola volta nell'arco di init vista e non c'è bisogno di passare mai callback esplicite.

+0

Backbone non è un framework, è una libreria. – Fdr

0

In realtà se si desidera avere un aggiornamento della visualizzazione per il recupero su una raccolta è necessario associare a RESET!

this.model.bind('reset', this.render, this); 

L'aggiornamento viene attivato solo se la raccolta corrente viene modificata.

ps bindTutto è pericoloso e pigro. (e probabilmente causerà problemi all'utente)

+0

Se si sottovaluta questa risposta potrebbe essere così gentile da spiegare perché? – sidonaldson

Problemi correlati