How to render hasMany associations each with their own controller

﹥>﹥吖頭↗ 提交于 2019-12-22 00:25:31

问题


So my models are set up like this :

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

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

I'm trying to create a view that has all posts and all comments display, but I need to decorate the comment objects.

This is what I'd like to do but, to no avail :

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

Properties defined in a App.CommentController are simply not found by the template.

I suspect that Ember.OrderedSet does not implement the itemController param - is there a workaround for this?


回答1:


You need to use the new expiremental control tag. This will load the view and controller for the specified type:

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

You will need to enable this expiremental feature first. Put this before ember is loaded:

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

Also, you will need to specify that the controller for comments should not be a singleton, otherwise there will only be one controller instantiated for all comment views:

// 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 });


来源:https://stackoverflow.com/questions/15365335/how-to-render-hasmany-associations-each-with-their-own-controller

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!