我有一个主干模型。使用model.set()可以设置一个本地值,使用model.save()可以将整个模型保存到服务器。
我如何知道自上次服务器保存后是否有更改,这意味着本地版本是脏的。
仅当模型从未保存到服务器时,model.isNew();才起作用。
发布于 2013-01-07 20:10:09
我正在使用CouchDB,而Couch有一个每次保存成功后都会更改的_rev属性。通过将以下代码放入模型初始化函数中,我解决了“save last-server-save”问题:
initialize : function() {
this.on('change',function(){
if(this.hasChanged('_rev')) {
this.isSaved = true;
}else{
this.isSaved = false;
}
},this);
}
发布于 2012-07-09 22:29:24
另一种选择是将所有更新设置为“静默”更新,然后在您想要同步时收集更改:
// Updates
myModel.set({foo: 'bar'}, {silent: true}); // Does not fire a 'changed' event
myModel.set({foobar: 'barfoo'}, {silent: true});
// Sync
if (myModel.hasChanged()) {
console.log(myModel.changedAttributes()); // {'foo':'bar', 'foobar':'barfoo'}
_.each(myModel.changedAttributes(), function(value, key) {
console.log(key+' used to be '+myModel.previous(key)+', but now is '+value);
}
myModel.save();
}
发布于 2015-10-14 15:35:13
仅供参考,我制作了一个小代码片段,它替换了默认的Backbone.sync方法。
被替换的Backbone.sync指出哪些属性自上次保存()以来发生了变化,并且它同时适用于模型和集合。
https://stackoverflow.com/questions/9215036
复制相似问题