【问题标题】:Using Handlebars #each helper with no key in JSON在 JSON 中使用没有键的 Handlebars #each 助手
【发布时间】:2012-11-19 10:48:20
【问题描述】:

我正在使用 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"
    }
]

这是我的把手模板:

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

我也试过了:

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

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

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

如果我的怀疑是错误的,我如何将#each 助手与我当前提供的 JSON 作为模板上下文一起使用?

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

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

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

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

【问题讨论】:

  • 您可以将您的 UPDATE 作为答案并接受该答案(但我认为您需要等待 24 小时才能接受您自己的答案),这可能有助于人们搜索未来类似的事情。 Handlebars 需要在模板中按名称引用事物,模板函数的 object 参数本质上是一个可移植的小命名空间,允许您为 data 命名。

标签: json handlebars.js


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多