javascript - 检查集合中是否有任何脏的 Backbone 模型数据

标签 javascript backbone.js underscore.js dirty-data

当用户在不同的 Backbone 集合模型之间切换时(通过单击表格行),我需要“唠叨”用户关于未保存的更改。我在谷歌上搜索了“检查 Backbone 模型脏数据”(例如),但没有找到任何确定的信息。

我使用 underscore's "some" 完成了这个和 isEqual functionality ,以如下方式,“some()”足以确定是否有任何未保存的更改(而不是那些精确的更改可能是什么),特别是因为模型属性实际上是一个对象数组。

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

我是 Backbone 的新手,想知道这是否是一种可以接受的临时检查脏模型数据的方法。或者,Backbone 是否为此目的提供了某种内置功能,而我最初尝试使用谷歌搜索时并未发现这些功能?

最佳答案

除了“节点”之外,我还有另一个属性需要监控,所以我改用 changedAttributes():http://backbonejs.org/#Model-changedAttributes :

var anyDirty = _.some(myCollection.models, function(model) {
    return model.changedAttributes();
});

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

关于javascript - 检查集合中是否有任何脏的 Backbone 模型数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18412747/

相关文章:

javascript - 我的美国号码格式代码中的有趣行为

javascript - 需要解释 Underscore.js 中的 _.bindAll() 函数

javascript - 在 underscore.js 中使用相同的 json 分别构建表标题和数据的最佳方法?

javascript - If..else.. 带有选择框值的 javascript 和 html

javascript - CoffeeScript 类和 nosuchmethod

javascript - Polymer:使用 javascript 创建纸张复选框

javascript - 为什么按键事件不起作用?

javascript - Backbone.js:我的事件不会触发!我该如何修复这个小代码?

jquery-mobile - Phonegap 和框架的世界?

javascript - 为什么 'without' 方法根据上下文返回不同的结果?