【发布时间】:2013-10-11 10:34:52
【问题描述】:
我有一个使用下划线 isEqual 比较两个 JSON 字符串的问题。目前我已经在主干中完成了一个应用程序,我正在使用 _.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.Model.toJSON()返回模型的attributes属性而不是JSON字符串。你有什么理由不能使用hasChanged?
标签: javascript json backbone.js underscore.js