1

我有以下模型:
一个有名字、成员和版主(都是用户)的社区。具有 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}}

但这给了我模板中的错误,例如:

. 编译器说:Error: Parse error on line 12: .../if}}
{{#if isModerator(controll
----------^ Expecting ' CLOSE','CLOSE_UNESCAPED','STRING','INTEGER','BOOLEAN','ID','DATA','SEP',得到'INVALID'

有谁知道如何处理这个问题?

4

2 回答 2

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")
});

如您所见,很容易将此逻辑移出模板并移入它所属的控制器中。

于 2013-08-26T12:01:44.823 回答
0

您可以使用ember-truth-helpers

{{#if (eq moderator.id user.id)}}
  <b>this is a moderator</b>
{{/if}}
于 2018-09-24T11:58:40.137 回答