我有一个这样的嵌套路由结构:
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
获取用户模型。我需要添加什么才能获取路径的正确数据?
答案 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>
答案 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
}
});