在我的應用程序,我加入fetchNew
稱爲新的方法來解決復位問題:
app.Collection = Backbone.Collection.extend({
// fetch list without overwriting existing objects (copied from fetch())
fetchNew: function(options) {
options = options || {};
var collection = this,
success = options.success;
options.success = function(resp, status, xhr) {
_(collection.parse(resp, xhr)).each(function(item) {
// added this conditional block
if (!collection.get(item.id)) {
collection.add(item, {silent:true});
}
});
if (!options.silent) {
collection.trigger('reset', collection, options);
}
if (success) success(collection, resp);
};
return (this.sync || Backbone.sync).call(this, 'read', this, options);
}
});
這是相當多的標準fetch()
方法相同,除了條件語句檢查項目的存在,默認使用add()
,而不是reset
。與簡單地在options
參數中傳遞{add: true}
不同,它允許您檢索可能與已加載內容重疊的模型組 - 使用{add: true}
將嘗試添加同一模型兩次時會引發錯誤。
這應該可以解決您的緩存問題,假設您的收藏已設置好,以便您可以通過options
中的某種page
參數告訴服務器要發回的選項頁面。你可能會想增加你的收藏中的某種數據結構來跟蹤已加載的網頁,以避免不必要做的要求,如:
app.BigCollection = app.Collection.extend({
initialize: function() {
this.loadedPages = {};
},
loadPage: function(pageNumber) {
if (!this.loadedPages[pageNumber]) {
this.fetchNew({
page: pageNumber,
success: function(collection) {
collection.loadedPages[pageNumber] = true;
}
})
}
}
});
感謝您鏈接到拉取請求 – peter