knu*_*nub 17 javascript backbone.js
我有一个骨干模型.使用model.set()我可以设置一个本地值,使用model.save()我可以将整个模型保存到服务器.
我怎么知道,自上次服务器保存以来是否有变化意味着本地版本是脏的.
model.isNew(); 仅在模型从未保存到服务器时才起作用.
tko*_*one 16
编辑:这个答案是在1.0版Backbone之前编写的.截至目前的Backbone版本(1.2.2)hasChanged不再反映"自上次保存以来"的变化.相反,它反映了"自上次设置以来"的变化.
倾听变化事件或检查hasChanged.
如果模型已更改,您可以保存更改.您甚至可以在更改事件发生时将保存方法连接到触发器.
如果您不想保存更改,则为模型设置一个脏的属性,并在明确保存时将其清除.
就像是:
change: function(){
this.dirty = true;
}
save: function(){
// do your save
if(success){
this.dirty = false;
}
}
isDirty: function(){
return this.dirty
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我正在使用CouchDB,Couch的_rev属性在每次保存成功后都会发生变化.我通过在模型初始化函数中放置以下代码解决了"自上次服务器保存"的问题:
initialize : function() {
this.on('change',function(){
if(this.hasChanged('_rev')) {
this.isSaved = true;
}else{
this.isSaved = false;
}
},this);
}
Run Code Online (Sandbox Code Playgroud)