我的ember路线中有嵌套资源。让我们根据this example假设我的router.js
看起来像:
App.Router.map(function() {
this.resource('post', { path: '/post/:post_id' }, function() {
this.resource('comment', { path ':comment_id' });
});
});
文档说这会产生如下路线:
/post/:post_id post.index
/post/:post_id/:comment_id comment.index
但我希望这些是post.show
和comment.show
,如何重命名这些路线?
答案 0 :(得分:1)
我使用以下设置进行此操作。
包含动态细分的路由器:
App.Router.map(function() {
this.resource('post.show', { path: '/post/:post_id' });
this.resource('comment.show', { path: '/post/:post_id/:comment_id' });
});
覆盖serialize
的{{1}}挂钩以反映预期的网址:
App.CommentShowRoute
实现此问题的主要问题是生成的url,因为App.CommentShowRoute = Ember.Route.extend({
serialize: function(model) {
return {
post_id : model.get("post_id"),
comment_id : model.get("id")
};
}
});
挂钩中的模型未加载,serialize
属性不存在,并且在加载模型后,这不是不会自动更新。因此,定位评论的post_id
会有一个网址linkTo
,而不是post/undefined/1
。
单击链接工作,因为一段时间后加载模型,但如果用户刷新页面,将无法正常工作,因为错误的网址。
要解决此问题,我使用了this讨论论坛评论中的3方法,我们使用post/1/1
帮助程序代替action
。唯一的区别是链接不会有url的href`属性,但是点击所有的工作。
结果是:
linkTo
这是一个完整实施的demo。