2013-03-14 47 views
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}} 

这里使用了控制助手,这样我就可以得到每个评论的控制器。

我有一个评论控制器谁是模型是从帖子中取得的评论的平面阵列。

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每个记录,但它似乎是创造新的控制器实例,而不是重新使用在模板中呈现的控制器。有没有找到相同的实例的方法?

回答

0

按设计,每个{{control}}帮助程序将创建您的控制器的新实例。听起来你正在寻找的东西是由{{each}}助手提供的。

{{#each post in controller}} 
    {{post.title}} 
    {{each comment in post.comments itemViewClass="App.ItemView" itemController="item"}} 
{{/each}} 
+0

嗨马克,谢谢你的回答。我实际上仍然得到重复的控制器 - 可能是我的'评论'方法创造这些重复,而不是找到现有的实例? – tigrish 2013-03-14 17:38:08

+0

我在'comments'方法中没有看到任何可以做到的事情。也许我不明白你想做什么。你说“它似乎在创建新的控制器实例,而不是重新使用在模板中呈现的控制器”。什么时候创建新的控制器实例。你怎么知道的? – 2013-03-14 19:24:37

+0

好的,我刚刚添加了关于我如何登录每个实例的代码 - 基本上只是将模板中的对象或通过“console.log”输出。我得到CommentController实例,但它们在模板中与CommentsController中的不一样。 从CommentsController创建的实例绑定到'posts'数组,这是一个用ember-data获取的集合。 – tigrish 2013-03-15 13:21:34