【发布时间】:2013-08-23 22:19:17
【问题描述】:
当用户在不同的 Backbone 集合模型之间切换时(通过单击表格行),我需要“唠叨”用户未保存的更改。我搜索了“检查主干模型脏数据”(例如),但没有找到任何确定的内容。
我使用underscore's "some" 和isEqual functionality 以如下方式完成了此操作,“some()”足以确定是否有任何未保存的更改(相反这些精确的变化可能是什么),特别是因为模型属性实际上是一个对象数组。
var anyDirty = _.some(myCollection.models, function(model) {
return !_.isEqual(model.get('nodes'), model.previousAttributes()['nodes]);
});
我是 Backbone 的新手,我想知道这是否是一种可接受的用于临时检查脏模型数据的方法。或者,Backbone 是否为此目的提供了某种内置功能,而我最初的谷歌搜索没有发现这些功能?
【问题讨论】:
-
感谢您指出这一点。现在我意识到我的问题写得不够具体。我想我想知道特定集合中的 any 模型是否已更改。在这种情况下,我对 _.some 的使用似乎仍然适用,但在迭代器内部,我可以使用 'model.hasChanged()' 而不是 _.isEqual()
-
您可以改为监听
change事件何时触发。将其作为您的收藏中的一个状态。将集合同步回服务器后清除它。然后只检查该状态属性。我认为change在创建新模型时也会被触发,因此您可能还需要检查isNew()。 -
@j03w 谢谢,但是持久化状态意味着管理状态,管理的状态越多,基于状态管理不正确的逻辑错误的可能性就越高——状态是邪恶的,必要时应该避免
标签: javascript backbone.js underscore.js dirty-data