Атрибуты модели уничтожены при сохранении данных формы
У меня проблема с сохранением существующей модели после отправки формы в приложении "Магистральная / Марионетка".
Итак, я отправляю форму и использую backbone.syphon для создания представления данных формы. Объект, который я строю, выглядит так:
{languages: {
{
de_DE: {
default: false
enabled: true
},
en_US: {
...
}
...
}
}
Я пытаюсь сохранить его в базовой модели с атрибутами, которые выглядят так:
attributes: {
id: "5"
languages: {
de_DE: {
default: false,
label: "German"
language: "de_DE"
selected: false
},
en_CA: {
...
},
...
}
}
Проблема в том, что когда я сохраняю существующую модель, используя model.save(data)
используя вышеупомянутую структуру данных для моих данных, экземпляры по умолчанию и метки полностью удаляются из моей модели. Они даже не отправляются на сервер. Они просто полностью удалены, хотя они сидят в previousAttrs
объект.
Экземпляр настройки синхронизации моей модели выглядит так:
sync: function(method, model, options){
var baseUrl = window.location.origin+'/qp-api/v1/master-app/';
var config = {}
switch(method){
case "create":
break;
case "read":
config = _.extend(config, {
method: "GET",
url: baseUrl+this.id+'/languages'
});
break;
case "update":
config =_.extend({
method: "PUT",
url: baseUrl+this.id+'/languages'
});
break;
case "delete":
break;
};
options = _.extend(options, config);
return Backbone.Model.prototype.sync.call(this, method, model, options);
},
Что я делаю неправильно? Я думал, что функция сохранения Backbone будет только обновлять измененные атрибуты. Мне кажется, что мой объект данных должен соответствовать настройке моих моделей attrs. Разве они не должны просто обновить? Я не понимаю что-то о том, как сохранить существующую модель?
1 ответ
Сначала я хочу упомянуть, что не стоит делать такие проверки if(languages.save(data){ .... })
, model.save()
вернет объект обещания, так что ваш if
состояние не будет работать, как ожидалось.
Одним из решений вашей проблемы является переопределение языковых моделей save
метод.
var Languages = Backbone.Model.extend({
// Declaration of you model
save: function (attrs, options) {
// merge attrs here with defaults/initial values
return this.constructor.__super__.save.call(this, attrs, options);
}
})
Надеюсь это поможет!