2013-08-26 35 views
1

我得到以下模型:
一個名稱,成員和版主(都是用戶)的社區。擁有ID和名字的用戶。Emberjs在帶把手的模板中的條件輸出

在CommunityMembers模板我想告訴所有的用戶,如果該用戶是一個主持人,我想添加一些額外的話說,他是一個主持人

<script type="text/x-handlebars" data-template-name="communityMembers"> 
    //model contains an array of users in a community 
    {{#each user in model}} 
    <li>{{user.name}}</li> 
    {{#each moderator in controllers.community.moderators}} 
     //here is the problem--> 
     {{#if moderator.id == user.id}} 
     <b>this is a moderator</b> 
     {{/if}} 
    {{/each}} 
    {{/each}} 
</script> 

我知道,在車把上,你可以」 t使用moderator.id == user.id,但它是一個簡單的方式來說出我想要做什麼。

我試圖寫一個把手幫手,但當我檢查幫助者時,我的論點是我得到一個字符串說:「moderator.id」或「user.id」,所以沒有工作。

我也試圖與在我的社區對象的方法來做到這一點:在模板

App.Community = Ember.Object.extend({ 
    isModerator: function(community, user_id){ 
    return community.moderators.indexOf({"id":user_id})!=-1; 
    } 
}); 

{{#if isModerator(controllers.community,user.id)}} 
     <h>this is a moderator</h> 
{{/if}} 

但是這給了我錯誤的模板,如:

. Compiler said: Error: Parse error on line 12: .../if}}
{{#if isModerator(controll
----------------------^ Expecting 'CLOSE', 'CLOSE_UNESCAPED', 'STRING', 'INTEGER', 'BOOLEAN', 'ID', 'DATA', 'SEP', got 'INVALID'

有沒有人知道如何處理這個問題?

回答

3

你不能在Handlebars中做到這一點(正如你所說),你不應該嘗試用一個幫手來模仿這種行爲。 此限制是故意設計到模板中的,因爲在模板中有太多邏輯被認爲是不好的做法。相反,你的目標應該是這樣寫你的模板:

<script type="text/x-handlebars" data-template-name="communityMembers"> 
    //model contains an array of users in a community 
    {{#each user in controller.usersWithModeratorFlag}} 
    <li>{{user.name}}</li> 
    {{#if user.isModerator}} 
     <b>this is a moderator</b> 
    {{/if}} 
    {{/each}} 
</script> 

現在你可能會問自己如何實現這個屬性。你可以嘗試這樣的事情(如果你不能嵌入此屬性爲您的用戶對象):

App.CommunityMembersController = Ember.ArrayController.extend({ 
    needs : ["community"], 
    usersWithModeratorFlag : function(){ 
    var moderators = this.get("controllers.community.moderators"); 
    return this.get("model").map(function(user){ 
     if(moderators.contains(user)){ 
     user.set("isModerator", true); 
     } 
    } 
    }.property("[email protected]", "[email protected]") 
}); 

正如你所看到的,這是很容易移動這樣的邏輯出了模板和到控制器,它屬於哪裏。