Базовая модель model.set для вложенного объекта в ответе

У меня есть ответ API с вложенным объектом, как показано ниже:

{
    name: '',
    age: '',
    departments: {
        size: '',
        head: ''
    }

}

Как установить атрибут head объекта departments?

Я попытался сделать ниже

model.get('departments').set({
    head: 'abc'
})

это выдает ошибку model.get(...).set не является функцией.

ИЗМЕНИТЬ:

пробовал делать -

 model.set('departments', {'head': 'abc'});

Это установит атрибут head в объекте departments. Однако он срывает атрибут размера с объекта departments в ответе.

Есть лучший способ сделать это? Что мне не хватает?


person arjary    schedule 19.12.2017    source источник


Ответы (1)


Я смог добиться этого, используя функцию клонирования из подчеркивания. Ниже приведено решение -

  var departmentObj = _.clone(model.get('departments'));
      departmentObj.head = 'abc';
      model.set({
        'departments': departmentObj
      });

Это должно сделать работу.

person arjary    schedule 19.12.2017
comment
Вам не нужно клонировать объект. set не работает с вложенным объектом department, потому что это не модель Backbone. Вы могли бы просто сделать model.get('departments').head = 'abc';, но никакие события не будут запущены. - person Emile Bergeron; 19.12.2017
comment
Мне нужно, чтобы соответствующие события были запущены. Так что делать то, что ты сказал, у меня не получится. - person arjary; 19.12.2017
comment
Это то, что я подробно объясняю в связанном ответе. - person Emile Bergeron; 19.12.2017
comment
А, теперь я вижу ответ!. Спасибо @EmileBergeron - person arjary; 20.12.2017