我有一个问题,使用下划线isEqual来比较两个JSON字符串。目前我已经在骨干网上完成了一个应用程序,并且我正在使用_.isEqual(savedModel.toJSON(),changedModel.toJSON())检测模型是否在页面中发生了变化,并提示“您有未保存的更改,你想保存吗?“对话如果用户轮胎离开。下划线isEqual和JSON
出于某种原因,我在随机的地方得到对话框,即使我什么都没做或者已经保存了更改。调试让我疯狂。
难道这是因为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();
}
看看一个这个http://stackoverflow.com/questions/1068834/object-comparison-in-javascript –
根据记录,'Backbone.Model.toJSON()''返回attributes'模型的属性不是'JSON'字符串。你有什么理由不能使用[hasChanged](http://backbonejs.org/#Model-hasChanged)? – j03w