Mustache - 如何检测数组不为空?

问题描述 投票:0回答:4

我想用 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'] }
arrays logic mustache
4个回答
89
投票

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

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

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


48
投票

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

{{#users.0}}
...
{{/users.0}}
{{^users.0}}
...
{{/users.0}}

1
投票

我在 Python 中使用 chevron。由于

{{#users.length}}
是依赖于实现的,如前面的答案中所述,并且在 Chevron 中对我不起作用,因此我在代码中返回一个对象,该对象仅包含列表(如果列表非空)。想必这种技术也适用于其他语言。

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

0
投票

如果您在 Python 中使用 Chevron,您可以测试第一个数组元素是否存在,以测试数组是否非空:

{{#users.0}}
    <ul>
        {{#users}}
            <li>{{.}}</li>
        {{/users}}
    </ul>
{{/users.0}}
© www.soinside.com 2019 - 2024. All rights reserved.