父路由器參數不能作爲子路由中的參數訪問,但應該用於檢索和填充中間數據結構。
鑑於你的模型定義如下:
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