親ルーターのパラメーターは、子ルートのパラメーターとしてはアクセスできなくなりましたが、中間データ構造を取得してデータを取り込むために使用する必要がありました。
モデルが次のように定義されているとします。
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 modelインスタンスは、慣例に従って、ルーターによって自動的に取得されます:指定されたモデルインスタンスを
post_id
参照します(このコメントを参照)。Post
id
- [B]:ここで
PostController
は、ルーターによって渡されたコンテキストが入力されます:post
、これはPost
上位に取得されたインスタンスです([A]を参照)。
- [C]: post modelインスタンス
PostController
のObjectController
(ie Proxy
)であるため、コメントを直接保持します。