如何渲染到父资源的索引{{outlet}}

时间:2013-06-23 07:23:27

标签: ember.js

我在Ember路由器中有2个嵌套资源,Post和Comment。我希望这能反映出网址:

/posts/1/comments/1

应该转到此页面,

  1. 使用帖子/索引模板为id = 1渲染帖子。
  2. 使用评论/索引模板
  3. 为评论ID = 1的帖子渲染评论

    以下是jsbin上的示例。

    我的路由代码是,

    App.Router.map(function() {
      this.resource('home', { path: '/' });
      this.resource('posts', { path: '/posts' }, function() {
        this.resource('post', { path: ':post_id' }, function() {
          this.resource('comments', { path: 'comments' }, function() {
            this.resource('comment', { path: ':comment_id' }, function() {
              // need explicit index
            });
          });
        });
      });
    });
    

    模板和Ember代码的其余部分非常多。唯一不同的是我从主路线重定向到/posts/1/comments/1

      

    我无法在/ index模板中获取帖子或评论。帖子正文和评论正文都是空白的。

         

    如果我将索引模板的内容嵌入主帖子或评论模板中,它就有效。但这不是我需要的,评论需要嵌套在帖子中。

         

    任何想法如何让这个工作?感谢。

    PS:我最近使用的是ember-latest和ember-data。

1 个答案:

答案 0 :(得分:3)

通常这类问题归结为命名约定。可能ember正在寻找你不期望的控制器和模板。尝试将以下内容添加到您的应用程序然后观看控制台,它将帮助您查看正在使用的路由/控制器/模板。

App = Ember.Application.create({
  LOG_ACTIVE_GENERATION: true,
  LOG_TRANSITIONS: true,
  LOG_VIEW_LOOKUPS: true
});

此外,这些路线可能比他们需要的更复杂。通常,将'post'路由嵌套在'posts'资源中是没有意义的。同样适用于评论/评论。试试这个:

App.Router.map(function() {
  this.route('posts');
  this.resource('post', { path: '/posts/:post_id' }, function() {
    this.route('comments')
    this.resource('comment', { path: '/comments/:comment_id' });
  });
});