Хотя TJ has the right answer, у меня есть лучший способ добиться того, что он предложить.
Вместо того, чтобы делать сырой клон атрибутов, я предпочитаю хранить мастер копию модели в начале приложения или инициализацию представления.
this.master = this.model.clone();
// ... then changes are made to this.model
Когда вы готовы к сохранению, используйте мастер-модель для сравнения атрибутов и получения изменений напрямую.
var changes = this.master.changedAttributes(this.model.attributes);
if (changes !== false) this.model.save(changes, { patch: true });
С этим, вы можете пропустить dataTosend = model.pick(_.keys(changedAttrs))
совсем так changes
уже является объектом всех разногласий с начальным состоянием мастер-модели.
Если это вид, который используется повторно после того, как модели сохранения:
var View = Backbone.View.extend({
initialize: function() {
this.updateMaster();
},
saveChanges: function() {
var changes = this.master.changedAttributes(this.model.attributes);
if (changes !== false) {
this.model.save(changes, {
patch: true,
context: true,
success: this.updateMaster
});
}
},
updateMaster: function() {
this.master = this.model.clone();
},
});
Что вы точно хотите послать сервер, только измененный атрибут или все атрибуты, присутствующие в модели или некоторые из атрибутов – Kenny
Can вы показываете нам в примере – Kenny
Только измененные атрибуты –