Ember嵌套路线。加载更多型号

时间:2014-06-04 20:55:00

标签: javascript ember.js ember-data

JsBin http://jsbin.com/EveQOke/153/

我知道如何使用Ember.RSVP.hash将多个模型加载到路径中。 (参见Jsbin Children菜单)。 我使用动态部分从集合children/1访问一个元素。 但是我无法将更多模型加载到嵌套资源中。

在我的例子中,我想填充选择的所有玩具,而不仅仅列出孩子的玩具。

我试图访问路线children

的模型
App.ChildRoute = Ember.Route.extend({
  model: function(param){
    return Ember.RSVP.hash({   
      allToys: this.modelFor("children"),
      child:this.store.find('child', param.child_id)
    });

  }
});

并使用其模型的玩具属性(因为已经装载了所有玩具)

child.hbs

<h4>All avaiable toys</h4>
<table>
{{#each toy in model.allToys.toys}}
  <tr>
    <td>{{toy.name}}</td>
  </tr>
{{/each}}
</table>

1 个答案:

答案 0 :(得分:1)

此处的第一个问题是您尝试从children抓取模型,但尚未定义children路由,您定义了childrenIndex路由。如果您要直接导航到child路由,则childrenIndex路由不会被实例化。当你点击children路线并且没有更深的时候,它才被击中。因此,要么您需要将逻辑从childrenIndex移动到children路由,要么只在商店中使用all,这不会获取任何新数据,只返回所有商店里不同类型的玩具。

this.store.all('toy')

你遇到的第二个问题是,当你使用链接到并发送一个模型时,它会跳过模型钩子,这对于动态路径(你定义:id)是一个问题,你期望它返回多个模型,不鼓励这种类型的路由,并建议您在setupController

中设置控制器上的其他属性
App.ChildRoute = Ember.Route.extend({
  model: function(param){
    this.store.find('child', param.child_id);
  },
  setupController: function(controller, model){
    this._super(controller, model); //default implementation of setupController
    controller.set('allToys', this.store.all('toy'));
  }
});

http://jsbin.com/EveQOke/155/edit

序列化

serialize: function(model){
  return {child_id:model.get('id')};
}

http://jsbin.com/EveQOke/163/edit