如何使用自己的控制器渲染hasMany关联

时间:2013-03-12 15:29:39

标签: ember.js ember-data

所以我的模型设置如下:

App.Post = DS.Model.extend
  comments: DS.hasMany 'App.Comment'

App.Comment = DS.Model.extend
  post: DS.belongsTo 'App.Post'

我正在尝试创建一个包含所有帖子和所有评论的视图,但我需要修饰评论对象。

这是我想做的,但无济于事:

<ul>
  {{#each post in controller}}
    <li>{{post.title}}</li>
    <ol>
      {{#each comment in post.comments itemController="comment"}}
        <li>{{comment.body}}</li>
      {{/each}}
    </ol>
  {{/each}}
</ul>

模板根本找不到App.CommentController中定义的属性。

我怀疑Ember.OrderedSet没有实现itemController参数 - 是否有解决方法?

1 个答案:

答案 0 :(得分:2)

您需要使用新的expiremental控制标记。这将加载指定类型的视图和控制器:

<ul>
  {{#each post in controller}}
    <li>{{post.title}}</li>
    <ol>
      {{#each comment in post.comments}}
        {{ control "comment" comment }}
      {{/each}}
    </ol>
  {{/each}}
</ul>

您需要先启用此过期功能。在加载ember之前放这个:

<script type='application/javascript'>
    ENV = {
        EXPERIMENTAL_CONTROL_HELPER: true
    };
</script>

此外,您需要指定注释的控制器不应该是单例,否则将只为所有注释视图实例化一个控制器:

// this is needed to use control handlebars template properly per
// https://github.com/emberjs/ember.js/issues/1990
App.register('controller:comment', App.CommentController, {singleton: false });