2013-03-14 46 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