2013-03-09 6 views
8
loadMore: function(){ 
    var $this = this; 
    console.log(this.Messages); //SAME AS AFTER 
    this.Messages.url = '/js/messages/?start=' + this.Messages.length 
    this.Messages.fetch({'add':true, 
     success:function(){ 
      console.log($this.Messages); //SAME AS BEFORE?? 
     }, 
     error:function(){ 
     } 
    }); 
}, 

संग्रह अद्यतन नहीं किया गया है। इस समारोह के बाद, घटनाओं को निकाल दिया जाता है, और स्क्रीन पर नए आइटम खींचे जाते हैं। समस्या यह है कि संग्रह ने नए मॉडल नहीं जोड़े।बैकबोन संग्रह fetch (जोड़ें: सत्य) संग्रह को अद्यतन नहीं करता

+0

क्या आपने सत्यापित किया है कि डेटा वास्तव में कॉल में वापस आ रहा है? – kinakuta

+0

क्या आप केवल 'सफलता' कॉलबैक के भीतर '$ this.Messages' में नए जोड़े गए मॉडल ढूंढ रहे हैं? यदि हां, तो क्या आप वाकई सुनिश्चित हैं कि, जब 'सफलता' कहा जाता है, तो संग्रह ने पहले से ही प्रतिक्रिया को पार कर लिया होगा और उन्हें संग्रह में जोड़ा होगा? –

उत्तर

0

Backbone.Collection.fetch():

fetch: function(options) { 
    options = options ? _.clone(options) : {}; 
    if (options.parse === void 0) options.parse = true; 
    var success = options.success; 
    options.success = function(collection, resp, options) { 
    var method = options.update ? 'update' : 'reset'; 
    collection[method](resp, options); 
    if (success) success(collection, resp, options); 
    }; 
    return this.sync('read', this, options); 
}, 

तो क्या यहां, है अपने समारोह में पारित var succees को सौंपा गया है।
collection[method](resp, options); कहा जाता है और आपके मामले में 'reset' है।
collection.reset को अपने सभी मॉडलों को जोड़ना और रास्ते में सभी घटनाओं को आग लगाना है। मुझे नहीं पता कि क्या हो रहा है लेकिन यह collection.reset, collection.add, model.add, आदि के माध्यम से जाता है ... मैंने इसका पालन नहीं किया।

मुझे यकीन नहीं है कि समस्या वास्तव में क्या है, मुझे इसके बारे में खेद है। मुझे उम्मीद है कि कम से कम आप कुछ चीजों को आजमाने में मदद कर सकते हैं ताकि हम इसे समझ सकें। लाइन if (success) success(collection, resp, options) आपके succes फ़ंक्शन पर कॉल है।

success: function(collection, resp, options) { 
    console.log(collection); // this might do the trick. 

    // if not, you could try the following 
    collection.on("reset", function(c, options) { 
    console.log(c); // see what that gives ya. 
    }); 
} 

एक और बात है, मैं स्रोत में कहीं भी नहीं मिल रहा या डॉक्स जहां collection.fetch सकता है: क्या आप करने का प्रयास हो सकता है हो रही अपनी सफलता कॉलबैक वापस पारित कर दिया तर्क स्वीकार करते हैं और उनमें से कुछ सांत्वना बाहर करना है एक ऐड विकल्प लेता है। अगर मुझे यह याद आया, तो कृपया मुझे बताएं कि मैं इसे देखना चाहता हूं।

शुभकामनाएं, मुझे बताएं कि आपको क्या मिल रहा है। यह डीबगर के माध्यम से एक कदम के साथ पीछे पीछे लायक हो सकता है।

शित, यह मुझे भी मारता है कि कंसोल ने मुझे संग्रह वस्तुओं के सबसे अद्यतित संस्करण को दिखाया है जब यह नहीं होना चाहिए। के साथ तुलना करें

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

: कोड है कि इस पर निर्भर करता है को तोड़ने के

var len = $this.Messages.length; 
console.log(len); 


//... 
// or in the success callback 
var len = collection.length; 
console.log(len); 
0

बैकबोन 1.0 इस सुविधा को हटा,:

बजाय या कुछ और संग्रह के lenghts बाहर सांत्वना की कोशिश

"यदि आप आने वाले मॉडल को वर्तमान संग्रह में जोड़ना चाहते हैं, तो संग्रह की सामग्री को बदलने के बजाय, pas लाने के विकल्प के रूप में {{add: true}। "

http://htmlpreview.github.com/?https://raw.github.com/documentcloud/backbone/0.9.2/index.html#Collection-fetch

मैं बैकबोन के एक पुराने संस्करण पर वापस लौट रहा जब तक इस मुद्दे को तय हो गई है सुझाव देते हैं।

21

जैसा कि पिछले उत्तर में उल्लेख किया गया था add विकल्प 1.0.0 में हटा दिया गया था। आप इसके बजाय remove: false पास करके एक ही चीज़ को पूरा कर सकते हैं। docs:

से लाने के व्यवहार उपलब्ध सेट विकल्पों का उपयोग करके अनुकूलित किया जा सकता।उदाहरण के लिए, एक संग्रह लाने के लिए, एक हर नए मॉडल के लिए घटना "जोड़ें" हो रही है, और हर के लिए एक "परिवर्तन" घटना को बिना कुछ हटाये मौजूदा मॉडल बदल गया है,: collection.fetch({remove: false})

रीढ़ 1.0 में
0

, आपके पास हाथ से रीसेट ट्रिगर करने के लिए:

youColloection.fetch({reset: true}); 
संबंधित मुद्दे