У меня есть вопрос, используя знак подчеркивания isEqual для сравнения двух строк JSON. В настоящее время я сделал приложение в магистрали, и я использую _.isEqual (savedModel.toJSON(), changedModel.toJSON()), чтобы определить, изменилась ли модель на странице и прозвали «У вас есть несохраненные изменения, do вы хотите сохранить? " если пользователь устает уходить.underscore 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