backbone.js缓存集合并刷新
backbone.js cache collections and refresh
我有一个集合,可能包含数千个模型。我有一个视图,它显示一个每页有50行的表。
现在,我希望能够缓存我的数据,这样当用户加载表的第1页,然后单击第2页时,第1页(第#01-50行)的数据将被缓存,这样,当用户再次单击第1页时,主干网就不必再次获取数据。
此外,我希望我的集合能够在不执行RESET的情况下刷新服务器上的更新数据,因为RESET将删除集合中的所有模型,包括我的应用程序中可能存在的现有模型的引用。是否可以从服务器获取数据,并在必要时通过比较现有数据和新到达的数据来更新或添加新模型?
在我的应用程序中,我通过添加一个名为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;
}
})
}
}
});
Backbone.Collection.fetch有一个选项{add:true},它将把模型添加到集合中,而不是替换内容。
myCollection.fetch({add:true})
因此,在您的第一个场景中,page2中的项目将被添加到集合中。
至于你的第二个场景,目前还没有内置的方法来做到这一点。
根据Jeremy的说法,这是你应该在应用程序中做的事情,而不是Backbone的一部分。
Backbone在用于协作应用程序时似乎存在许多问题,其中另一个用户可能正在更新您的客户端模型。我感觉Jeremy似乎专注于单用户应用程序,上面的讨论就是一个例子。
在您的案例中,处理第二个场景的最简单方法是迭代您的集合,并在每个模型上调用fetch()
。但是,这对性能不是很好。
为了找到更好的方法,我认为您必须覆盖集合_加上,然后按照dalyons对这个拉取请求所做的操作。
我设法在Backbone 0.9.9核心中获得了update
。看看它,因为它正是你所需要的http://backbonejs.org/#Collection-更新。
- 强制模板刷新ember.js
- JQuery合并了keyup和focusout两个函数
- 如何通过ajax刷新JSF填充的javascript变量
- JSON重构(合并内容)与javascript
- 如何解决Yii中的页面刷新问题
- Jquery提交表单而不刷新
- 刷新页面后会出现警报
- 刷新后保留对网页的更改
- 如何在不刷新页面的情况下更新显示框
- 重定向时角度刷新浏览器
- 如何防止jQueryonclick事件中的Ruby方法在页面刷新时执行
- Javascript,输出结果后页面不断刷新
- $(document).height()在刷新时随机化值(Safari 5.1.10)
- 刷新父窗口后无法关闭窗口
- 刷新页面时hasClass不起作用
- Javascript-根据赋值顺序,按键合并对象数组
- X秒后刷新select元素
- chart.series[id].remove()无法刷新高位图表/高位股票中其他系列的图例属性
- 触发媒体查询断点时刷新页面
- ASPX页面上的C#值在刷新时合并