无法在Backbone + Handlebars中显示外部JSON数据

时间:2014-04-24 17:52:32

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

我使用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))

整个过程一直有效,直到在模板中实际显示数据。所以我得到的只是你好。 - 我已经尝试按照说明here将JSON数据分配给一个对象,但没有运气。在您提出问题之前,我已经console.log json检查JSON数据是否实际上正在通过..它是。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果@template(json)确实是json对象,则说{ name: 'John Doe' }应该有效。但看起来你在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))