Магистраль получает модель, возвращающую странные данные

Я получаю данные модели с моего сервера, как это в моем магистральном приложении,

var projectModel = new App.Models.Project({ id: 1001 });
projectModel.fetch();

Выборка работает, и я получаю данные с сервера, но данные не в том формате, который я ожидал, проект - это модель, которая содержит другие модели и коллекции, однако то, что возвращается с сервера и в модель, выглядит так:

{ project_name: "A Test Project" project_managers: Array[5], workers: Array[10] }

Это означает, что каждый раз, когда я делаю выборку для проекта, я должен установить каждый атрибут, который должен быть моделью или коллекцией, подобной этой,

projectModel.set('workers', new App.Collections.Users(projectModel.get('workers')));

В моей модели у меня есть функция инициализации, в которой я делаю все эти настройки, но, похоже, это игнорируется при выборке.

Конечно, есть лучший способ установить мои атрибуты для выборки, чем проходить их по отдельности?

Если переопределить метод синтаксического анализа в модели, например,

parse: function(response, options) {
  this.set('workers', new App.Collections.Users(response.workers));
}

Это действительно возвращает работников как коллекцию в модели проекта, но игнорирует отдельные атрибуты, такие как имя, поэтому я ожидаю, что это будет возвращено,

{
  name : Test Project,
  workers : s //this is how console.log outputs it
},

но все, что я получаю обратно,

{
    workers : s //this is how console.log outputs it
 }

почему это?


person Udders    schedule 19.08.2015    source источник


Ответы (1)


Вы можете переопределить метод анализа модели, чтобы реализовать это поведение, которое будет выполняться автоматически каждый раз, когда вы извлекаете свою модель.

http://backbonejs.org/#Model-parse

В функцию передается необработанный объект ответа, и она должна возвращать хэш атрибутов, который будет установлен в модели.

Итак, в вашей модели

parse: function(response, options) {
  response.workers = new App.Collections.Users(response.workers));
  return response;
}
person k2ndlab    schedule 19.08.2015
comment
Спасибо за это, кажется, это частично работает, пожалуйста, посмотрите мое редактирование. - person Udders; 19.08.2015
comment
@Udders вы должны вернуть весь хэш атрибутов в методе синтаксического анализа, изменив те, которые вы хотите изменить. я отредактировал свой ответ - person k2ndlab; 19.08.2015