44

我想用 Mustache 实现以下逻辑:

{{#if users.length > 0}}
    <ul>
        {{#users}}
            <li>{{.}}</li>
        {{/users}}
    </ul>
{{/if}}

// eg. data = { users: ['Tom', 'Jerry'] }

我应该修改users结构以满足需要吗?例如:

{{#hasUsers}}
    <ul>
        {{#users}}
            <li>{{.}}</li>
        {{/users}}
    </ul>
{{/hasUsers}}

// eg. data = { hasUsers: true, users: ['Tom', 'Jerry'] }
4

3 回答 3

78

抱歉,这可能为时已晚。但我有类似的要求,并找到了更好的方法来做到这一点:

{{#users.length}}
    <ul>
        {{#users}}
            <li>{{.}}</li>
        {{/users}}
    </ul>
{{/users.length}}
{{^users.length}}
    <p>No Users</p>
{{/users.length}}

此处的工作示例:http: //jsfiddle.net/eSvdb/

于 2013-07-27T11:14:51.233 回答
39

如果您希望内部语句对数组的每个元素重复,则使用 {{#users.length}} 效果很好,但如果您只希望语句只运行一次,您可以使用:

{{#users.0}}
...
{{/users.0}}
{{^users.0}}
...
{{/users.0}}
于 2015-04-02T17:04:38.697 回答
0

我正在为 Python使用雪佛龙。由于{{#users.length}}如先前答案中所述依赖于实现,并且在雪佛龙中对我不起作用,因此我在代码中返回一个对象,该对象仅在列表非空时包含列表。据推测,这种技术也适用于其他语言。

users = ["user1", "user2", "userN"]
user_obj = {"user_list": users} if len(users) > 0 else {}
template = """
{{#users}}
<ul>
    {{#user_list}}
    <li>{{.}}</li>
    {{/user_list}}
</ul>
{{/users}}
"""

chevron.render(template, {"users": user_obj})
于 2021-12-25T08:29:40.127 回答