0

次のモデル:

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

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

投稿テンプレートにすべての投稿とすべての投稿コメントを表示しています:

{{#each post in controller}}
  {{post.title}}
  {{#each comment in post.comments itemController="comment"}}
    {{partial 'comment' comment}}
    {{this}}
  {{/each}}
{{/each}}

ここではコントロール ヘルパーを使用して、コメントごとにコントローラーを取得します。

モデルが投稿から取得されたコメントのフラット化された配列である CommentsController があります。

App.CommentsController = Em.ArrayController.extend
  itemController: 'comment'
  needs: 'posts'
  postsBinding: 'controllers.posts'

  comments: (->
    comments = []
    @get('posts').forEach (post) ->
      post.get('comments').forEach (comment) ->
        comments.pushObject comment
    console.log comments
    @set 'model', comments
  ).observes('posts.length')

App.CommentController = Em.ObjectController.extend()

このコントローラーは、予想どおり CommentController で各レコードを装飾しますが、テンプレートでレンダリングされているコントローラーを再利用する代わりに、新しいコントローラー インスタンスを作成しているようです。同じインスタンスを見つける方法はありますか?

4

1 に答える 1

0

設計上、各{{control}}ヘルパーはコントローラーの新しいインスタンスを作成します。あなたが探しているものは、{{each}}ヘルパーによってすぐに提供されるようです。

{{#each post in controller}}
  {{post.title}}
  {{each comment in post.comments itemViewClass="App.ItemView" itemController="item"}}
{{/each}}
于 2013-03-14T15:21:33.377 に答える