【问题标题】:Ember nested route. Load more modelsEmber 嵌套路由。加载更多模型
【发布时间】:2014-06-04 20:55:00
【问题描述】:

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

我知道如何使用 Ember.RSVP.hash 将多个模型加载到路线中。 (见 Jsbin 儿童菜单)。 我使用动态部分从集合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>

【问题讨论】:

    标签: javascript ember.js ember-data


    【解决方案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

    【讨论】:

    • 谢谢。第二个问题很清楚,但我不知道如何实现相同的系统(列表和新页面-没有出口-详细信息)。如果我调用 /children/1 “断言失败:无法在未定义的对象上调用带有 'id' 的 get。”我什至试图扁平化嵌套路由:jsbin.com/EveQOke/159
    • 这只是路由的一个问题,所以你在路由中有 :child_id ,并且默认情况下,ember 会尝试基于模型构建 url,并且当它试图从你的模型中获取 child_id 时它是未定义的。诀窍是告诉 ember 如何从模型中获取 id,您可以使用路由中的序列化钩子来这样做
    • 上面包含的示例,由于一些车把问题,我不得不升级 ember 的版本(不确定它是什么,但不值得研究)。此外,通过 id /children/1 查找时似乎没有正确设置 hasmany 关系
    • kingpin2k:“此外,它似乎没有正确设置通过 id /children/1 查找的 hasmany 关系” - 也许我的 ApplicationSerializer 是错误的。我知道你写的;在这种类型的路线上不鼓励加载多个模型,但我找不到任何其他方法来让它工作。这是新的 JsBin:jsbin.com/EveQOke/166。也许有人会觉得它有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多