如何在Ember.js中为嵌套资源定义路由名?

时间:2013-08-07 12:05:14

标签: ember.js routes

我的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.showcomment.show,如何重命名这些路线?

1 个答案:

答案 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