Атрибуты модели уничтожены при сохранении данных формы

У меня проблема с сохранением существующей модели после отправки формы в приложении "Магистральная / Марионетка".

Итак, я отправляю форму и использую 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); 
   } 
})

Надеюсь это поможет!

Другие вопросы по тегам