我知道这个问题已经讨论了好几次了,但我找不到其中很多方面的答案,我将在这里解释一下。
模型save()
在客户端和服务器之间保持同步。 Backbone.js推动你以这两种方式之一使用它(afaik):
model.isNew()
返回true
)。patch:true
保存只会发送更改后的属性
模型到服务器。在Backbone中,它意味着 ONLY
changedAttributes()
返回的属性将被发送。关键是changedAttributes()
仅返回自上次change
事件以来的更改。这对于不会一直更新的模型非常有用,实际上可以在任何更改时自动发出ajax请求。
但是如果你有一个不断变化的模型(例如代码/文本编辑器或可以拖放的元素并且应该跟踪它的位置),你不能只保存每一个change
事件。您需要按时间间隔保存自上次调用save()
以来所有已更改的属性。
你认为Backbone.js实际上为这种同步提供了很好的支持吗? Bakcbone.js是否跟踪自上次 save()
以来的更改(并且不仅仅是自上次change
事件以来)?或者你必须“忠诚地”做到这一点?
答案 0 :(得分:0)
您必须使用自己的基本模型扩展骨干模型。
var BaseModel = Backbone.Model.extend({
save: function(key, val, options){
var attrs
if (key == null || typeof key === 'object') {
attrs = key;
options = val;
} else {
(attrs = {})[key] = val;
}
attrs = _.extend(this.unsaved || {}, attrs);
this.unsaved = {};
return Backbone.Model.prototype.save.call(this, attrs, options);
},
set: function(key, val, options) {
var attr
if (key == null) return this;
if (typeof key === 'object') {
attrs = key;
options = val;
} else {
(attrs = {})[key] = val;
}
this.unsaved = _.extend(this.unsaved || {}, attrs);
return Backbone.Model.prototype.save.call(this, attrs, options);
}
});
完全未经测试的代码,但应该非常接近您需要做的事情。