我有以下型号:
具有名称,成员和版主的社区(均为用户)。具有id和名称的用户。
在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>
我知道在把手中你不能使用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}}
但是这给了我模板中的错误,如:
。编译器说:错误:第12行的解析错误:... / if}} {{#if isModerator(controll
---------------------- ^期待'CLOSE','CLOSE_UNESCAPED','STRING','INTEGER','BOOLEAN','ID','DATA ','SEP','无效'
有谁知道如何处理这个问题?
答案 0 :(得分: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("model.@each", "controllers.community.moderators.@each")
});
正如您所看到的,将此逻辑移出模板并进入控制器非常容易。
答案 1 :(得分:0)
您可以使用ember-truth-helpers
{{#if (eq moderator.id user.id)}}
<b>this is a moderator</b>
{{/if}}