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);
  }
});

我的模板是:

学年:

<div class="yearList">
{{#each item in model}}
    {{#linkTo 'classyear' item}}{{item.id}}{{/linkTo}}
{{/each}}
</div>
{{outlet}}

学年:

<div class="transformContainer">
    {{trigger sizeComposites}}
    {{name}}
    {{#each students}}
      {{partial student}}
    {{/each}}
</div>

(“触发器”助手来自另一个 SO 帖子。不过,问题是在添加它之前发生的)

我正在使用 Ember 模型 RESTAdapter。当我加载 /classyear/:classyear_id 时,看起来 classyear 正在渲染它的数据两次。一次正确加载数据,一次未加载数据。顺序似乎是随机的。如果无数据选项最后出现,它会清除正确加载的数据,留下空白页。反之亦然,页面内容显示得很好。

有什么想法吗?

/编辑 2:更多信息:

看起来 0 记录回复来自类年加载。因此,零记录回复很可能实际上只是我的 hasMany 字段“学生”中的零记录。

如果我加载 /classyears (未指定班级年份),它只加载一次,以获取班级年份选项。如果我然后单击一个班级年份,除非我刷新页面,否则它不会重新加载班级年份,此时它会同时加载两者,如果班级年份加载(一个 findall)第二个完成,它不会在页面上显示任何数据(其他比顶部正确填充的 classyears 模板)。

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

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

4

1 回答 1

1

首先,您需要为 a 指定一个模型Student,如下所示:

Posterkiosk.Student = Ember.Model.extend({
  id: Ember.attr(),
  name: Ember.attr(),
  imageUrl: Ember.attr(),
  gradyear: Ember.attr()
});

Posterkiosk.Student.adapter = fixtureAdapter;

现在,在您的示例中,您正在为 has many to 设置键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+ 删除了部分的下划线,加上部分名称应该用引号引起来。

于 2013-08-30T19:40:11.677 回答