2013-08-30 21 views
0

在emberjs论坛发表了这个,但是SO似乎更合适。导致数据重载/替换的嵌套路由?

嗨!我有两条路线叫做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加载。所以,在我的hasMany字段“学生”中,零记录回复可能只是零记录。

如果我加载/ classyears(没有指定班级年份),它只加载一次,以获得班级年选项。如果我然后点击课程年,它不会重新加载classyear,除非我刷新页面,此时它将加载这两个页面,并且如果classyears加载(findall)第二次完成,它将不显示页面上的任何数据(其他而不是类年模板,正确填充,在顶部)。

所以......也许我的classyears模型没有正确处理hasMany字段?

我觉得我越来越近,但仍不确定发生了什么。

+0

您可以将您的classyear模板添加到您的问题吗? – intuitivepixel

+0

编辑添加两个模板。 –

+0

这是有点旧,但可能有一些有用的信息http://stackoverflow.com/questions/16246586/ember-data-sideloaded-properties-being-dropped-on-a-model – ianstarz

回答

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+从部分删除了下划线,再加上部分名称应该用引号引起来。

+0

我确实有指定的模型为学生。几乎与你的相同,但我包括一个“belongsTo”(在Classyear上使用hasMany)。 现在,让我看看我是否理解其余的部分: 现在,我将学生数据嵌入到classyear响应中,因此每个classyear json对象都有一年的ID,而“students”属性包含一个数组的学生对象。这就是为什么它拉动数据两次(或尝试两次,并成功一次)? –

+0

如果我的答案有助于解决您的问题,我会很感激,如果你会接受它:) – knownasilya