父路由器参数不能作为子路由中的参数访问,但应该用于检索和填充中间数据结构。
鉴于你的模型定义如下:
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
(见this comment)。
- [B]:这里,
PostController
将由路由器通过上下文填充:post
,这是Post
实例上检索(见[A])。
- [C]:
PostController
是ObjectController
(即Proxy
),因此它直接保留注释。
当您路由到/ posts /:post_id/comments必须首先调用parent(/ posts /:post_id)的connectOutlets。可能是这可以帮助 – zaplitny 2012-08-01 21:20:26
对于新的路由器的答案请参阅这里:http://stackoverflow.com/a/15225128/1474739 – 2013-03-05 15:50:55