2012-01-05 12 views
5

, así que tengo una vista que se ve así.Backbone.js: cómo forzar a la vista para que se actualice automáticamente al cambiar una colección de modelos

//base class 
    var SelectListView = Backbone.View.extend({ 
     initialize: function() { 
      _.bindAll(this, 'addOne', 'addAll'); 
      this.collection.bind('reset', this.addAll); 
     }, 
     addAll: function() { 
      this.collection.each(this.addOne); 
     }, 
     events: { 
      "change": "changedSelected" 
     }, 
     changedSelected: function() { 
      this.selected = $(this.el); 
      this.setSelectedId($(this.el).val()); 
     } 

    }); 

    //my extended view 
    var PricingSelectListView = SelectListView.extend({ 
     addOne: function(item) { 
      $(this.el).append(new PricingView({ model: item }).render().el); 
     }   
    }); 

He instancia la vista como esta ...

var products = new ProductPricings(); 
var pricingsView = new PricingSelectListView({ 
    el: $("#sel-product"), 
    collection: products 
}); 

En otro lugar (otro método vistas personalizadas) He actualizado la colección de la vista de la fijación de precios

pricingsView.collection = new ProductPricings(filtered); 

Esto no visto hacer cualquier cosa.

pricingsView.render(); 

Por lo tanto, ahora la colección tiene menos elementos, pero la nueva vista nunca se representa ni actualiza en el DOM.

¿Cómo lo hago? 1.) ¿actualizo la representación en el DOM? 2.) Hacer que actualice automáticamente el DOM? ¿Tengo que decir de alguna manera que se muestre cuando cambie la colección?

Respuesta

4

Vincula addOne() a un evento reset. Cuando simplemente reemplaza la instancia pricingsView.collection, ese evento no se desencadena y no se ejecuta addOne().

Procurad, más bien:

pricingsView.collection.reset(filtered); 
3

Esto podría funcionar, ya que ates al evento de restauración de colección ya:

pricingsView.collection.reset(filtered); 

http://backbonejs.org/#Collection-reset

Todavía tienes ajustar su lógica de representación para eliminar antigua marcado desde el punto de vista cuando reinicio ocurre.

+0

Gracias. ¡La bombilla está encendida! – ctrlShiftBryan

Cuestiones relacionadas