我在我的第一个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')
});
答案 0 :(得分:1)
你必须在两种情况下传递相同的数据。(当你得到一个集合或单个项目时)。 我认为你收集部分数据是为了收集。 当您浏览链接时,它假定它已经拥有该模型的数据,因此它不会发送新请求。 IMO您应该能够访问集合中收到的该模型的部分数据。
如果模型很大,则将其拆分为多个模型。它也需要服务器端更改。