如何使用Handlebars.js加入JSON数据

时间:2012-09-06 23:09:46

标签: handlebars.js

我有一个代表评论流的JSON,例如:

var comments = [
    { "comment_id": 1, "author_id": 100, "text": "hello world!" },
    { "comment_id": 2, "author_id": 120, "text": "cheers world!" },
    { "comment_id": 3, "author_id": 100, "text": "goodmorning world!" },
    { "comment_id": 4, "author_id": 100, "text": "goodnight world!" } ]

您可能会注意到,author_id 100评论了三次。

我有另一个带有author数据的JSON,例如:

var authors = {
    100: {"username": "ciccio"},
    120: {"username": "pernacchia"} }

我想在渲染模板时加入这两个JSON,使用authors作为关键字查找author_id。有一个帮助者会很棒:

<div class="comments">
    <!-- `join` takes an iterable, a lookup dict, a key,
          and a new name for the joined property -->
    {{#join comments authors "author_id" "author"}}
    <div class="Comment">
       {{author.username}} says: {{text}}
    </div>
    {{/join}}
</div>

我试着写下一个帮助来做这个,但我不明白如何引用帮助器中的authors dict

现在我正在手动加入两个dicts,为模板创建 ad-hoc new JSON。 但是将这项工作委托给模板会很棒。

1 个答案:

答案 0 :(得分:0)

除非您在代码中的许多地方进行此连接,否则我认为不值得定义辅助函数。只需使用Javascript / JQuery:

$.each(comments, function(key, comment) {
    var author_id = comment.author_id;
    var comment_text = comment.text;
    if (authors[author_id]) {
        if (authors[author_id].text) {
            authors[author_id].text = authors[author_id].text + " " + comment.text;
        } else {
            authors[author_id].text = comment.text;
        }
    }
});

上面将“text”字段添加到“authors”记录中,所以在此之后,只需遍历“authors”列表即可。如果你真的热衷于此,你也可以将它转换为辅助函数。

查看实际操作:http://jsfiddle.net/DUkFa/