Javascript Backbone.js:智能更新已更改属性的列表
我知道这个问题已经讨论过好几次了,但我找不到一个答案来回答它的许多方面,我将在这里尝试解释 ModelJavascript Backbone.js:智能更新已更改属性的列表,javascript,backbone.js,model,save,crud,Javascript,Backbone.js,Model,Save,Crud,我知道这个问题已经讨论过好几次了,但我找不到一个答案来回答它的许多方面,我将在这里尝试解释 Modelsave()在客户端和服务器之间保持同步。Backbone.js促使您以以下两种方式之一使用它(afaik): 保存模型的所有项目:这会将所有内容发送到 服务器,甚至仅在客户端使用的属性和属性 这一点没有改变。这是新模型的默认设置(当 model.isNew()返回true) 使用补丁保存:true将只发送已更改的属性 将模型复制到服务器。在主干中,它意味着仅 将发送changedAttribu
save()
在客户端和服务器之间保持同步。Backbone.js促使您以以下两种方式之一使用它(afaik):
model.isNew()
返回true
)补丁保存:true
将只发送已更改的属性
将模型复制到服务器。在主干中,它意味着仅
将发送changedAttributes()
返回的属性changedAttributes()
只返回自上次change
事件以来的更改。这对于不总是更新的模型很有用,并且实际上可以在任何更改时自动发出ajax请求
但是,如果您有一个不断变化的模型(例如,代码/文本编辑器或可以拖放并跟踪其位置的元素),则不能只在每个变化事件中保存。您需要每隔一段时间保存自上次调用save()
以来更改的所有属性
你认为Backbone.js实际上为这种同步提供了很好的支持吗?Bakcbone.js是否跟踪自上次save()
(而不仅仅是自上次change
事件)以来的更改?或者您必须“手动”完成此操作?您必须使用自己的基础模型扩展主干模型
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);
}
});
完全未经测试的代码,但应该非常接近您需要执行的操作