嵌套路由加载父模型

时间:2013-08-18 19:40:19

标签: ember.js ember-data

我有一个这样的嵌套路由结构:

App.Router.map(function() {
  this.resource('user', {path: '/user/:user_id'}, function() {
    this.route('followers', {path: '/followers'});
  });
});

当我点击user/123/followers路线时,我希望它会自动从user/123/followers获取模型,但它只会再次从user/123获取用户模型。我需要添加什么才能获取路径的正确数据?

2 个答案:

答案 0 :(得分:2)

每条路线都有自己的模型,默认情况下不支持这种模式。

所以App.UserRoute模型,返回当前模型,如预期:

App.User.find(params.user_id)

但是因为App.UserFollowersRoute拥有自己的模型钩子,所以你必须提供它。 您可以使用modelFor轻松完成此操作。

App.UserFollowersRoute = Ember.Route.extend({
  model: function() {
    return this.modelFor('user');
  }
});

modelFor从命名路径中查找模型。因此modelFor('user')将从App.UserRoute检索模型。

在您的user/followers模板中,您将拥有当前用户,在当前上下文中:

<script type="text/x-handlebars" data-template-name="user/followers">          
  <h2>{{name}} followers:</h2>
  <ul>
  {{#each followers}}
      <li>{{name}}</li>
  {{/each}}
   </ul>
</script>

Here a sample with this working

答案 1 :(得分:0)

当您点击/user/123/...时,Ember会自动调用User.find(123),因为这是App.UserRoute的默认模型挂钩。如果要在访问关注者路由时获取其他数据,请为App.UserFollowersRoute定义模型挂钩:

App.UserFollowersRoute = Ember.Route.extend({
  model: function() {
    user = this.controllerFor('user');
    // Now find and return the list of followers
  }
});