在我的API和我的服务器上,我有一个这样的模型层次结构:
WorkoutPlan-> workouts->练习
我可以使用DS.hasMany关系成功加载该结构。
但是,我的客户端视图将计划分解为数周,因此建立客户端模型结构会很好
WorkoutPlan->周 - > workouts->练习
如果周数不是余烬数据模型,是否可以这样做?
如果没有,我应该只转换我的JSON,以便我可以在周模型上有一个hasMany(锻炼有一个周列,我可以用作周模型的准id)。
或者最好是保持当前的模型结构,并以某种方式以某种方式按周过滤锻炼。
答案 0 :(得分:1)
您的ember模型不必模仿您的服务器型号。通常有很好的理由去标准化,最小化数据量并简化模型。例如,服务器处理多个用户,您的ember应用程序可能只涉及一个。
我在这里看到两个选项。我对你的模型知之甚少,没有提出什么是最好的。
一般情况下,我会指向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'});