在emberjs论坛上发布此内容,但似乎更合适。
嗨!我有两条叫做classyears和classyear的路线。它们是这样嵌套的:
this.resource('classyears', function(){
this.resource('classyear', { path: '/classyear/:classyear_id'});
});
Posterkiosk.ClassyearsRoute = Ember.Route.extend({
model: function() {
return Posterkiosk.Classyear.find();
}
});
Posterkiosk.ClassyearRoute = Ember.Route.extend({
model: function(model) {
return Posterkiosk.Classyear.find(model.classyear_id);
}
});
我的模板是:
Classyears:
<div class="yearList">
{{#each item in model}}
{{#linkTo 'classyear' item}}{{item.id}}{{/linkTo}}
{{/each}}
</div>
{{outlet}}
Classyear:
<div class="transformContainer">
{{trigger sizeComposites}}
{{name}}
{{#each students}}
{{partial student}}
{{/each}}
</div>
(“触发器”助手来自另一个SO帖子。问题是在添加之前发生的)
我正在使用Ember模型RESTAdapter。当我加载/ classyear /:classyear_id时,看起来classyear正在渲染其数据两次。一次使用正确加载的数据,一次没有加载数据。订单似乎是随机的。如果最后发生无数据选项,则会清除正确加载的数据,留下空白页。反之亦然,页面内容显示得很好。
有什么想法吗?
/编辑2:更多信息:
看起来0记录的回复来自classyears loading。因此,在我的hasMany字段“学生”中,零记录回复可能实际上只是零记录。
如果我加载/ classyears(没有指定类年),它只加载一次,以获得class year选项。如果我然后点击一年级,它不会重新加载classyears,除非我刷新页面,此时它加载两者,如果classyears加载(一个findall)完成第二次,它在页面上不显示任何数据(其他比classyears模板,正确填充,在顶部)。
所以...也许我的classyears模型没有正确处理hasMany字段?
我觉得我越来越近,但仍然不确定是什么。
答案 0 :(得分:1)
首先,您需要为Student
指定模型,如下所示:
Posterkiosk.Student = Ember.Model.extend({
id: Ember.attr(),
name: Ember.attr(),
imageUrl: Ember.attr(),
gradyear: Ember.attr()
});
Posterkiosk.Student.adapter = fixtureAdapter;
现在,在您的示例中,您将有多个密钥设置为students
,但students
是一个对象数组,而不是id,因此创建一个名为student_ids
的属性,并传递一组id,现在这是你的关键。
Posterkiosk.Classyear = Ember.Model.extend({
students: Ember.hasMany('Posterkiosk.Student', {key: 'student_ids'})
});
如果您设置embedded: true
,那么您的Classyears服务器响应应该像这样返回:
{
classyears: [
{..},
{..}
],
students: [
{..},
{..}
]
}
否则,EM将对Student
模型上的端点单独调用,并根据student_ids
属性获取该数据。
查看工作jsbin。
提示:RC.7 +从partials中删除了下划线,加上部分名称应该在引号中..