我有一个使用下划线 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/