您的 ember 模型不必模仿您的服务器模型。通常有充分的理由去规范化、最小化数据量和简化模型。例如,服务器处理多个用户,您的 ember 应用程序可能只关注一个。
我在这里看到两个选项。我对您的模型知之甚少,无法建议最好的模型。
- 添加 WeekPlan 作为模型。您可以更改服务器中的序列化逻辑(如果您有特定于应用程序的 API)或在序列化客户端期间更改此逻辑(如果此更改对其他 API 使用者没有意义)。
- 在您的锻炼路由器中添加过滤器。你也可以有一个带有周数的 ArrayController,它只是在锻炼计划中汇总锻炼的周数。
一般来说,我会走向 1,但正如我所说,我对你的模型知之甚少,无法为任何一个提供强有力的理由。
更新。展开 2
这有两个部分。第一个是 WeekPlanRoute。这可能类似于以下内容。它基本上负责创建一个 Weeks 数组并使用它将其传递给 WorkoutRoute/Controller
App.WeekPlaneRoute = Ember.Route.extend({
model: function(){
// assuming we already have a WorkoutPlan
return workoutPlan.workouts.mapBy('week');
},
);
然后,您可以使用将一周作为参数传递的链接导航到锻炼:
{{#each}}
{{#link-to 'workouts.index' this}}{{/link-to}}
{{/each}}
在您的 WorkoutRoute 中,您将使用该参数进行过滤:
Todos.WorkoutRoute = Ember.Route.extend({
model: function(params){
// assuming we already have a WorkoutPlan
return workout.filterBy(params.weekNumber);
}
);
您还必须更改路线以添加 weekNumber 的动态段(它必须与上面使用的参数匹配)。
this.resource('workouts', {path: '/workouts/:weekNumber'});