2012-06-25 32 views
5

Uso backbone.js y tengo un modelo sin una colección. En la vista, invoco fetch en el modelo con una devolución de llamada para representar la vista.vista de actualización automática en backbone.js

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

¿cómo puedo hacer que la vista se actualice automáticamente cuando cambie el modelo? p.ej. No deseo especificar la devolución de llamada anterior cada vez que llamo a buscar. Intenté vincular la vista a muchos eventos de modelo al inicializar, pero esto no funcionó.

Respuesta

12

En la vista, agregar un controlador de eventos para el modelo de la vista:

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

Es 'cambiar' o 'agregar' dependiendo de si este modelo ya se ha cargado o no. Pero normalmente usa fetch() para cargar nuevos modelos, por lo que se suscribe a 'agregar'. –

+1

puede ir a lo seguro y simplemente usar 'this.model.bindAll (this.render)', asumiendo que está de acuerdo con mostrar la vista en cada evento de modelo – jackwanders

1

Backbone está orientada a eventos, no devolución de llamada marco impulsado (aunque técnicamente son devoluciones de llamada). Y su enfoque no parece ser nativo de Backbone. Cuando realiza fetch(), el modelo de usuario activará automáticamente el evento "agregar". Todo lo que necesita hacer es en la vista correspondiente añadir esto en initialize:

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

De esta manera se suscribe a este, incluso sólo una vez en la vista de inicio y no tiene que pasar cada vez devoluciones de llamadas explícitas.

+0

Backbone no es un framework, es una biblioteca. – Fdr

0

¡En realidad, si desea tener una vista de actualización en la recuperación en una colección, debe vincular RESTABLECER!

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

La actualización solo se activa si se edita la colección actual.

ps bindTodo es peligroso y flojo. (y probablemente va a causar problemas en el futuro)

+0

Si rechaza esta respuesta, ¿podría explicarme por qué? – sidonaldson

Cuestiones relacionadas