2013-08-18 58 views
1

我有一个嵌套的航线结构是这样的:嵌套路线加载父模型

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

每条路线都有自己的模型,而这并不是propaged,默认情况下。

所以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

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