2013-03-09 123 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(){ 
     } 
    }); 
}, 

集合未更新。在此功能之後,事件被觸發,並且新項目被繪製在屏幕上。問題是收集沒有添加新的模型。Backbone collection fetch(add:true)不更新集合

+0

您是否驗證過數據實際上是在get調用中返回的? – kinakuta 2013-03-09 06:54:52

+0

您是否只在'success'回調中的'$ this.Messages'中尋找新添加的模型?如果是這樣,你確定當調用'success'時,集合已經解析了響應並將它們添加到集合中? – 2013-03-09 06:57:28

回答

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.resetcollection.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需要添加選項。如果我錯過了,請讓我知道我想看看它。

祝你好運,讓我知道你在找什麼。通過調試器也可能值得一試。

該死的時候,控制檯經常向我展示集合對象不應該有的最新版本的時候,它也讓我感到震驚。

試圖安慰了藏品的lenghts而不是什麼:

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


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

正如前面的回答中提到的那樣,在1.0.0中刪除了add選項。您可以通過傳遞remove: false來完成相同的操作。來自docs:

可通過使用可用集 選項來自定義提取行爲。例如,爲了獲取一個集合,得到一個「添加」事件 爲每一個新的模式,改變了「改變」事件中爲每個現有 模型,而不刪除任何東西:collection.fetch({remove: false})

0

骨幹1.0,你必須用手觸發復位:

youColloection.fetch({reset: true});