检查集合中的任何脏Backbone模型数据

Geo*_*pty 5 javascript dirty-data backbone.js underscore.js

当用户在不同的Backbone集合模型之间切换时(通过单击表行),我要求用户"唠叨"未保存的更改.我用google搜索"检查主干模型脏数据"(例如)并没有找到任何确定的东西.

我使用下划线的"some"isEqual功能完成了这一点,其方式如下,"some()"足以确定是否存在任何未保存的更改(与那些精确更改可能相反),特别是因为model属性实际上是一个对象数组.

var anyDirty = _.some(myCollection.models, function(model) {
    return !_.isEqual(model.get('nodes'), model.previousAttributes()['nodes]);
});
Run Code Online (Sandbox Code Playgroud)

我是Backbone的新手,我想知道这是否是一种可接受的adhoc检查脏模型数据的方法.或者,Backbone是否为此目的提供了某种内置功能,我最初的谷歌搜索尝试没有透露?

Geo*_*pty 2

除了“节点”之外,我还需要监视另一个属性,因此我转而使用changedAttributes(): http: //backbonejs.org/#Model-changedAttributes

var anyDirty = _.some(myCollection.models, function(model) {
    return model.changedAttributes();
});
Run Code Online (Sandbox Code Playgroud)

可能使这个解决方案不完美的是,即使属性已更改回其原始值,它似乎也会返回changedAttributes 的对象。因此,从长远来看,我几乎需要的是拍摄原始数据的快照并与之进行比较。尽管如此,使用 model.changedAttributes() 是比我第一次发布的更简洁的替代方案。

  • 您会发现更改的属性包含自上次“设置”以来的属性,而不是上次“同步”的属性 (3认同)