Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查集合中是否存在任何脏主干模型数据_Javascript_Backbone.js_Underscore.js_Dirty Data - Fatal编程技术网

Javascript 检查集合中是否存在任何脏主干模型数据

Javascript 检查集合中是否存在任何脏主干模型数据,javascript,backbone.js,underscore.js,dirty-data,Javascript,Backbone.js,Underscore.js,Dirty Data,我有一个要求,当用户在不同的主干收集模型之间切换时(通过单击表行),我需要“唠叨”用户未保存的更改。我在谷歌上搜索了“检查主干模型脏数据”(例如),但没有找到任何确定的结果 我是通过使用“some()”来完成这项工作的,并且以如下方式,“some()”足以确定是否存在任何未保存的更改(与那些精确的更改相反),特别是因为model属性实际上是一个对象数组 var anyDirty = _.some(myCollection.models, function(model) { return

我有一个要求,当用户在不同的主干收集模型之间切换时(通过单击表行),我需要“唠叨”用户未保存的更改。我在谷歌上搜索了“检查主干模型脏数据”(例如),但没有找到任何确定的结果

我是通过使用“some()”来完成这项工作的,并且以如下方式,“some()”足以确定是否存在任何未保存的更改(与那些精确的更改相反),特别是因为model属性实际上是一个对象数组

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

我是主干网的新手,我想知道这是否是一种被接受的方法,用于对脏模型数据进行临时检查。或者,主干网是否为此提供了某种内置功能,这是我最初在谷歌搜索时没有发现的?

除了“节点”之外,我还需要监视另一个属性,因此我正在切换到使用changedAttributes()::


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

怎么样?谢谢你指出这一点。现在我意识到我的问题写得不够具体。我想我想知道某个特定系列中是否有任何型号发生了变化。在这种情况下,我使用的u.some似乎仍然适用于迭代器,但在迭代器内部,我可以使用“model.hasChanged()”而不是u.isEqual(),您可以在触发
change
事件时收听。将其作为状态保留在集合中。将集合同步回服务器后清除它。然后仅从该状态属性进行检查。我认为在创建新模型时也会触发
change
,因此您可能需要检查
isNew()
也一样。@j03w谢谢,但持久化状态意味着管理状态,管理的状态越多,基于不正确的状态管理发生逻辑错误的可能性就越高——状态是邪恶的,如果需要,应该避免。您会发现changedattributes包含自上次“设置”而非上次“同步”以来的属性
var anyDirty = _.some(myCollection.models, function(model) {
    return model.changedAttributes();
});