backbone.js:自上次服务器保存以来是否有变化?

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)

  • "每一套"都没有"改变"吗?来自Backbone文档"更改的属性是包含自上次**集**以来已更改的所有属性的内部哈希."因此,如果你执行`foo.set('a',1); foo.set('b',2)`,`changed`将包括`b`但不包括`a`,对吗?这对于确定"自上次保存以来_____已更改"并不是非常有用. (2认同)

小智 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)