使用Handlebars #each helper,JSON中没有键

时间:2012-12-01 10:09:18

标签: json handlebars.js

我正在使用PHP文件从数据库中提取数据并将其作为JSON返回。然后我想使用JSON数据作为Handlebars模板的上下文。我的问题是,我似乎无法使用Handlebars的“{{#each}}”帮助程序来处理PHP文件返回的JSON。

以下是返回的JSON示例:

[
    {
        "id": "3",
        "type": "Abseiling",
        "title": "Abseiling Adventure",
        "location": "Glenrock State Conservation Area",
        "date": "2012-12-18 00:00:00",
        "length": "2 hours",
        "price": "50"
    },
    {
        "id": "1",
        "type": "Abseiling",
        "title": null,
        "location": "Glenrock State Conservation Area",
        "date": "2013-02-10 00:00:00",
        "length": "3 hours",
        "price": "70"
    }
]

这是我的Handlebars模板:

{{#each}}
<p>{{location}}</p>
{{/each}}

我也尝试过:

{{#each}}
<p>{{this.location}}</p>
{{/each}}

我怀疑为什么这不起作用是#each助手不能像我正在尝试那样运行,而是必须像这样调用:{{#each something}}。如果是这种情况,是否有任何简单的方法可以将密钥添加到JSON数据中,以便它采用以下形式:

something: [
    {
        ...
    },
    {
        ...
    }
]

如果我的怀疑是错误的,我怎样才能将#each helper与我目前提供的JSON作为模板上下文一起使用?

更新:找到解决此问题的方法,我只需更改模板调用

jQuery(".events").html(Handlebars.templates['Events'](data));

jQuery(".events").html(Handlebars.templates['Events']({events: data}));

这意味着我可以使用{{#each events}}。

1 个答案:

答案 0 :(得分:7)

我遇到了同样的问题,并使用' this '关键字解决了这个问题。

{{#each this}}
  <p>{{this.location}}</p>
{{/each}}