当params改变时,Ember.js路由没有执行新的请求

时间:2014-01-16 14:28:09

标签: ruby-on-rails serialization ember.js ember-router nested-resources

我在我的第一个Web应用程序中工作,Ember.js支持Rails for 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')
});

1 个答案:

答案 0 :(得分:1)

你必须在两种情况下传递相同的数据。(当你得到一个集合或单个项目时)。 我认为你收集部分数据是为了收集。 当您浏览链接时,它假定它已经拥有该模型的数据,因此它不会发送新请求。 IMO您应该能够访问集合中收到的该模型的部分数据。

如果模型很大,则将其拆分为多个模型。它也需要服务器端更改。