【发布时间】:2013-10-27 16:37:41
【问题描述】:
我正在尝试弄清楚如何使模型集合与我的服务器保持同步。目前,我的代码看起来像这样,但它显然有一些问题......
var myCollection = Backbone.Collection.extend({
url: '/api/block',
...
sync: function() {
_.each(this.models, function(model) {
model.sync('create', model);
});
}
});
目前,当我对我的集合调用 sync 时,它会遍历所有模型,并在每个模型上调用 sync。我很惊讶,首先这不是 Backbone.Collection.sync 方法的默认行为。还是我误解了“同步集合”应该做什么?
其次,我的model.sync('create', model); 行有点奇怪。为什么我在模型本身上调用方法时必须传入模型?另外,我手动调用“创建”,这显然是错误的。 'sync' 不应该知道它是应该创建还是更新?
而且,“同步”不应该足够智能,可以对已从我的收藏中删除的任何模型调用“删除”吗?
我猜我应该考虑在我的模型上自定义同步方法,但我仍然对我正在做的事情感到困惑,这是不寻常的,需要我自定义这些同步方法。
我觉得我错过了关于同步的一个相当重要的观点。
【问题讨论】:
-
Backbone 将没有 id 的模型视为新模型并调用 create(在保存方法上),否则调用 update(或补丁)。不,这不是 Backbone.Collection 的默认行为,我认为您误解了 Backbone 的
sync、fetch和save方法(然后阅读文档)。您的一些观点不是主干/客户端,而是服务器端。 -
啊哈。好的,正如我所怀疑的那样,我忽略了一些相当基本的东西,那就是保存方法。我直接跳过同步。因此,据我所知, save 完成了我认为 sync 所做的工作。 Sync 用于处理来自服务器的保存请求的响应,以确保模型在保存后包含服务器上实际存在的属性。那么collection.sync 的意义何在? sthat什么时候被解雇?
-
一次同步所有集合(如果你有 /blog/:id/tags 或类似的东西)。您的服务器必须支持嵌套关系。
标签: backbone.js collections sync