javascript - 下划线 isEqual 和 JSON

标签 javascript json backbone.js underscore.js

我有一个使用下划线 isEqual 来比较两个 JSON 字符串的问题。目前我已经在 Backbone 中完成了一个应用程序,我正在使用 _.isEqual(savedModel.toJSON(),changedModel.toJSON() ) 来检测模型是否在页面中发生了更改并提示“您有未保存的更改,请执行你想救吗?”如果用户厌倦了导航离开,则会出现对话框。

出于某种原因,即使我没有执行任何操作或已保存更改,我也会在随机位置收到该对话框。调试让我发疯。

这是否是因为 JSON 不能保证 JSON 中对象的顺序,并且下划线 isEqual 不能正确处理这种情况?那么即使模型相同,JSON 中的某些属性也可能不同并且返回 false?

伪代码:

//when entering the page the original model is cloned, when user does changes to the   
//page, the model is cloned again
var savedModel = currentModel.clone().toJSON();

//when the user tries to navigate away from the page
if( _.isEqual(savedModel, model.toJSON() ){
    showSavePromptDialog();
}

最佳答案

按照backbone.toJSON()使用的函数链,似乎_.extend用于复制对象,而_.extend使用for..in循环来迭代对象。 for..in 以任意顺序迭代对象,这可能是问题的根源。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

关于javascript - 下划线 isEqual 和 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19316043/

相关文章:

javascript - Jquery 在后台 ajax 加载后监听输入字段的变化

javascript - 我应该验证我的表格两次吗?

java - Spring 应用程序中的正确文件路径

python - 在Python中打印某些JSON数据

javascript - 无法使用 Node js 访问桌面应用程序中的窗口关闭功能

javascript - masonryjs 和 mustachejs 之间的冲突

javascript - 在javascript中的两个不同的数组对象中查找具有不同值的元素

arrays - 将json单元素数组转为字符串

javascript - 每次按下按钮时清除 View 并重新开始 - backbone.js

backbone.js - Backbone 1.0 重置与同步事件