json - 使用 Handlebars.js,如何使用 JSON 文件中的值循环数据

标签 json handlebars.js

这是 JSON 数组:

{
"profile": [
    {
        "ID": 343,
        "gender": "female",
        "from": "Olivia"
    },
    {
        "ID": 4543,
        "gender": "female",
        "from": "Meagen"
    },
    {
        "ID": 787,
        "gender": "male",
        "from": "Aaron"
    }
]
}

这有效,它输出数组中的所有对象...

{{#profile}}

{{from}} {{gender}}

{{/profile}}

输出看起来像...

Olivia female
Meagen female
Aaron male

但我的目标是只循环那些性别等于女性的人。像...

{{#profile gender="female"}}

{{from}} {{gender}}

{{/profile}}

...并使输出看起来像...

Olivia female
Meagen female

这几天我一直在努力寻找答案。我是不是遗漏了什么或者偏离了轨道?

最佳答案

我看到两个选项:

  1. 在将数据传递给 Handlebars 之前过滤数据。
  2. 使用自定义助手来处理模板中的逻辑。

第一个非常简单。

第二个取决于你想怎么做。您可以添加一个“if equal”助手:

Handlebars.registerHelper('if_eq', function(a, b, block) {
    return a == b
         ? block(this)
         : block.inverse(this);
});

并在您的模板中执行此操作:

{{#profile}}
    {{#if_eq gender "female"}}
        {{from}} {{gender}}
    {{/if_eq}}
{{/profile}}

演示:http://jsfiddle.net/ambiguous/NnH83/

或者您可以通过多种方式编写自己的迭代器:

Handlebars.registerHelper('each_female', function(list, opts) {
    var i, result = '';
    for(i = 0; i < list.length; ++i)
        if(list[i].gender == 'female')
            result = result + opts.fn(list[i]);
    return result;
});

{{#each_female profile}}
    {{from}} {{gender}}
{{/each_female}}

或者更一般一点:

Handlebars.registerHelper('each_when', function(list, k, v, opts) {
    console.log(arguments);
    var i, result = '';
    for(i = 0; i < list.length; ++i)
        if(list[i][k] == v)
            result = result + opts.fn(list[i]);
    return result;
});

{{#each_when profile "gender" "female"}}
    {{from}} {{gender}}
{{/each_when}}

演示:http://jsfiddle.net/ambiguous/E4jTs/ , http://jsfiddle.net/ambiguous/AkZxN/

参见 fine manual如果您想要更接近您建议的语法的东西,请使用 Hash Arguments。

关于json - 使用 Handlebars.js,如何使用 JSON 文件中的值循环数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12959238/

相关文章:

json - 返回 JSON 对象

ember.js - 在 emblem.js 帮助程序调用中提供多个参数

javascript - 基于值/对的 Handlebars.js JSON 设置类

javascript - 获取所有阵列的独特元素 - Handlebars

json - 创建单个 IAM 用户以仅访问特定的 S3 存储桶

jquery - jquery 中的链接函数,以便一个函数在另一个函数完成后开始

json - UWP Httpclient postasync 在后台任务中使用 json 字符串

javascript - 将 PHP 对象转换为数组

javascript - 为什么服务器端 HTML 呈现比客户端更快?

javascript - 在 Handlebars.js 中引用数组项