【发布时间】: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