Маршрут Ember.js не выполняет новый запрос при изменении параметров

Я работаю над своим первым веб-приложением с Ember.js, поддерживаемым Rails для API. У меня есть следующие вложенные ресурсы:

this.resource('selection_processes', function() {
  this.resource('selection_process', { path: '/:selection_process_id' }, function() {
    this.resource('candidate', { path: '/candidates/:candidate_id' });
  });
})

Итак, когда я обращаюсь к selection_processes/1, он получает всех своих кандидатов. Это нормально, но проблема в том, что когда я нажимаю на другую ссылку процесса выбора, Ember не выполняет новый запрос, не отображая данные в моих шаблонах. Кстати, API возвращает правильные объекты.

Единственный способ, с помощью которого я заработал, заключался в том, чтобы включить все объекты в мои сериализаторы, заставив Ember получать все данные всех вложенных ресурсов в одном запросе. Но это кажется ленивой практикой и «тяжелой».

Кстати, вот мои маршруты:

Safira.SelectionProcessesRoute = Ember.Route.extend({
  model: function () {
    return this.store.find('selection_process');
  }
});


Safira.SelectionProcessRoute = Ember.Route.extend({
  model: function (params) {
    return this.store.find('selection_process', params.selection_process_id);
  }
});


Safira.CandidateRoute = Ember.Route.extend({
  model: function (params) {
    return this.store.find('candidate', params.candidate_id);
  }
});

ОБНОВЛЕНИЕ

Вот мои модели

Safira.SelectionProcess = DS.Model.extend({
  beginDate         : DS.attr('date'),
  endDate           : DS.attr('date'),
  title              : DS.attr('string'),
  description       : DS.attr('string'),
  steps             : DS.hasMany('Safira.Step', {async: true})
});

Safira.Step = DS.Model.extend({
  realization: DS.attr('date'),
  title: DS.attr('string'),
  candidates: DS.hasMany('Safira.Candidate', {async: true}),
  selection_process : DS.belongsTo('Safira.SelectionProcess')
});

Safira.Candidate = DS.Model.extend({
  name               : DS.attr('string'),
  email              : DS.attr('string'),
  confirmation_token : DS.attr('string'),
  step               : DS.belongsTo('Safira.Step')
});

person Bernardo    schedule 16.01.2014    source источник
comment
Можешь показать свои модели?   -  person claptimes    schedule 16.01.2014
comment
Конечно, я только что обновился.   -  person Bernardo    schedule 16.01.2014
comment
Можете ли вы подтвердить, что ваш сервер возвращает идентификаторы кандидатов? При рендеринге вы делаете что-то вроде {{#each steps}}, а затем {{#each candidates}}? Это рендеринг steps?   -  person claptimes    schedule 16.01.2014
comment
Да, он возвращает идентификаторы кандидатов и шагов. Это тоже этапы рендеринга. Когда я ввожу URL-адрес типа selection_processes/2 напрямую, он отлично работает, отображая все данные. Но если я перехожу по ссылке, чтобы отобразить другой процесс выбора (например, selection_processes/3), он ничего не возвращает, если только я не ввожу URL-адрес напрямую.   -  person Bernardo    schedule 16.01.2014


Ответы (1)


вы должны передавать одни и те же данные в обоих случаях (когда вы получаете коллекцию или отдельные элементы). Я думаю, что вы возвращаете частичные данные в случае сбора. Когда вы переходите по ссылке, предполагается, что у нее уже есть данные для этой модели, поэтому он не будет отправлять новый запрос. IMO, вы должны иметь доступ к частичным данным этой модели, полученным в коллекции.

если модель большая, разделите ее на несколько моделей. это также требует изменения на стороне сервера.

person Ashwin S    schedule 16.01.2014
comment
Хм, понял. Я думаю, это проблема. Спасибо, попробую. - person Bernardo; 16.01.2014