【问题标题】:Ember.js route is not performing a new request when params change当参数更改时,Ember.js 路由未执行新请求
【发布时间】:2014-02-05 12:28:47
【问题描述】:

我正在使用 Ember.js 开发我的第一个 Web 应用程序,并支持 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')
});

【问题讨论】:

  • 你能展示你的模型吗?
  • 好的,我刚刚更新了。
  • 你能确认你的服务器正在返回候选ID吗?渲染时,你是在做类似{{#each steps}} 然后{{#each candidates}} 的事情吗?是渲染steps吗?
  • 是的,它正在返回候选人和步骤 ID。它也是渲染步骤。当我直接输入像selection_processes/2 这样的网址时,它可以正常工作,呈现所有数据。但是,如果我通过链接导航来显示另一个选择过程(例如,selection_processes/3),它不会返回任何内容,除非我直接输入 url。

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


【解决方案1】:

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

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

【讨论】:

  • 嗯,明白了。我认为这就是问题所在。谢谢,我试试看。
猜你喜欢
  • 2018-04-08
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多