【问题标题】:Can't display external JSON data in Backbone + Handlebars无法在 Backbone + Handlebars 中显示外部 JSON 数据
【发布时间】:2014-06-10 04:11:01
【问题描述】:

我正在使用 Thorax(Backbone + Handlebars)开发应用程序,并尝试加载将在模板中使用的外部 JSON 文件。也可以使用 Coffeescript。

我的测试 JSON 数据:

{
   "name" : "John Doe"
}

我的模板:

Thorax.templates['space'] = Handlebars.compile """
  <h2>Hello, {{name}}.</h2>
"""

我的ajax调用成功函数:

success: (json) =>
    data = {space: json}
    $(app.appContainer).html(@template(data))

整个过程一直进行到实际在模板中显示数据。所以我得到的只是 Hello,. - 我已经尝试按照说明 here 并将 JSON 数据分配给一个对象,但没有运气。在你问之前,我已经 console.log'ed json 检查 JSON 数据是否真的通过了.. 是的。

有什么建议吗?

【问题讨论】:

  • 你不想说@template(json) 而不是将传入的{name: 'John Doe'} 包装在另一个对象中吗?
  • 那是有道理的,我之所以这样做是因为我在这里找到了答案:stackoverflow.com/questions/11462494/… 虽然我确实按照你建议的方式尝试过,但也没有运气
  • @template(json) 应该可以工作 (jsfiddle.net/ambiguous/8ugBr) 除非有人在你背后捣乱。
  • 嗯.. 绝对不能让它像那样工作。我怕有人乱来。如果有帮助,我很乐意发布更多我的代码?真的很想弄清楚这一点:(
  • 你确定json 是一个对象吗?只是在黑暗中拍摄,看起来它应该对我有用。

标签: jquery json backbone.js coffeescript handlebars.js


【解决方案1】:

如果json 确实是{ name: 'John Doe' } 对象,则说@template(json) 应该有效。但看起来你在 json 参数中得到了一个 JSON 字符串,而不是一个解析的对象。这可以解释您从 console.log 看到的结果,控制台中的输出看起来更像是什么

console.log("{\n\"name\" : \"John Doe\"\n}")

会产生比什么

console.log({"name": "John Doe"})

会产生。

也许您的服务器发送回带有错误 Content-Type 的 JSON,因此在调用成功处理程序之前不知道它应该通过 JSON.parse。尝试修复您的服务器代码以包含 Content-Type: application/json 标头;那么你可以说:

success: (json) =>
    $(app.appContainer).html(@template(json))

它应该可以工作。如果你不能这样做,作为最后的手段,你可以自己解析 JSON:

success: (json) =>
    json = JSON.parse(json)
    $(app.appContainer).html(@template(json))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    相关资源
    最近更新 更多