我已经使用以下设置来解决这个问题。
具有动态段的路由器:
App.Router.map(function() {
this.resource('post.show', { path: '/post/:post_id' });
this.resource('comment.show', { path: '/post/:post_id/:comment_id' });
});
覆盖的serialize
钩子App.CommentShowRoute
以反映预期的网址:
App.CommentShowRoute = Ember.Route.extend({
serialize: function(model) {
return {
post_id : model.get("post_id"),
comment_id : model.get("id")
};
}
});
实现这一点的主要问题是生成的 url,因为serialize
钩子中的模型没有加载,post_id
属性不存在,并且在模型加载后不会自动更新。因此,linkTo
定位评论将有一个 url post/undefined/1
,而不是post/1/1
. 单击链接有效,因为在加载模型一段时间后,但如果用户刷新页面,将无法正常工作,因为 url 错误。
为了解决这个问题,我使用了这个讨论论坛评论中的 3 方法,我们使用action
helper 而不是linkTo
. 唯一的区别是链接不会有带有url的href`属性,但是当点击所有作品时。
结果是:
App.PostShowRoute = Ember.Route.extend({
events : {
goToComment: function(context){
this.transitionTo('comment.show', context);
}
}
});
这是一个完整实现的演示。