父路由参数不再作为子路由中的参数访问,但应该用于检索和填充中间数据结构。
鉴于您的模型定义如下:
App.Post = DS.Model.extend({
text: DS.attr('string'),
// ...
comments: DS.hasMany('App.Comment')
});
App.Comment = DS.Model.extend({
// You may also have: "post: DS.belongsTo('App.Post')", but we do not care for this exemple
text: DS.attr('string'),
// ...
});
这应该是可行的:
posts: Ember.Route.extend({
route: 'posts',
member: Ember.Route.extend({
route: '/:post_id', // [A]
connectOutlets: function (router, post) {
var applicationController = router.get('applicationController');
applicationController.connectOutlet('post', post); // [B]
},
show: Ember.Route.extend({
route: '/'
}),
comments: Ember.Route.extend({
route: 'comments',
connectOutlets: function (router) {
var postController = router.get('postController'),
comments = postController.get('comments'); // [C]
postController.connectOutlet('comments', comments);
},
}),
})
})
- [A]:根据约定,后模型实例将由路由器自动检索:
post_id
指Post
代具有给定的模型实例id
(请参阅此评论)。
- [B]:此处,
PostController
将由路由器使用传递的上下文填充:post
,这是Post
上层检索到的实例(参见 [A])。
- [C]:
PostController
是 post 模型实例上的ObjectController
(ie Proxy
),因此它直接保存评论。