2012-01-05 15 views
5

बदलते समय दृश्य को स्वचालित रूप से रीफ्रेश करने के लिए मैं कैसे मजबूर करूं ताकि मेरे पास ऐसा दृश्य दिखाई दे।Backbone.js: मॉडल संग्रह

//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); 
     }   
    }); 

मैं इस तरह दृश्य instantiated है ...

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

कहीं और (एक और विचारों कस्टम विधि) मैं मूल्य निर्धारण दृश्य के संग्रह

pricingsView.collection = new ProductPricings(filtered); 

यह नहीं देखा है अद्यतन किया है कुछ भी करना।

pricingsView.render(); 

तो अब संग्रह में कम आइटम हैं लेकिन नए दृश्य को कभी भी डीओएम में प्रस्तुत या ताज़ा नहीं किया जाता है।

मैं कैसे करूँ I 1.) डीओएम में प्रतिपादन को ताज़ा करें? 2.) इसे स्वचालित रूप से डीओएम रीफ्रेश करें? जब भी संग्रह में परिवर्तन होता है, तो क्या मुझे किसी भी तरह इसे प्रस्तुत करने के लिए कहना है?

उत्तर

4

आपने addOne() को reset ईवेंट पर बाध्य किया है। जब आप pricingsView.collection इंस्टेंस को प्रतिस्थापित करते हैं तो उस ईवेंट को ट्रिगर नहीं किया जाता है और addOne() निष्पादित नहीं किया जाता है।

बजाय का प्रयास करें:

pricingsView.collection.reset(filtered); 
3

के बाद से आप पहले से ही संग्रह के रीसेट घटना के लिए बाध्य यह काम हो सकता है:

pricingsView.collection.reset(filtered); 

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

आप अभी भी अपने प्रतिपादन तर्क tweak दृश्य से पुराने मार्कअप दूर करने के लिए जब रीसेट होता है।

+0

धन्यवाद। प्रकाश बल्ब चालू है! – ctrlShiftBryan

संबंधित मुद्दे