2012-01-04 69 views
4

我使用underscore.js模板库和我的主干示例。我的模板看起来是这样的:如何使用underscore.js输出JSON对象?

<script id="results-template" type="text/template"> 
    <h2><%= title %></h2> 
</script> 

JSON对象看起来是这样的:

{"src":"placeholder.jpg","title":"an image placeholder","coordinates":[0,0],"tags":["untagged"],"location":"home"} 

我想通过我的模板,但我通过我的控制台得到错误解析这个对象是:

Uncaught ReferenceError: title is not defined 

我在做什么错?现场小提琴是在这里:http://jsfiddle.net/amit_e/muLjV/46/

回答

8

你的问题是这样的:

JSON.stringify(myPhoto) 

这就需要将

myPhoto.toJSON() 

原因:你的JSON.stringify()将会把整个myPhoto模型作为JSON 。现在,骨干有这个功能,输出JSON作为JSON对象,所以你可以使用model.toJSON()

更新的jsfiddle:http://jsfiddle.net/saelfaer/muLjV/50/

+0

dahh !!我困惑了两个JSON函数。所以你说'myPhoto.toJSON()'将对象传递给模板,但'stringify'函数不会? – 2012-01-04 09:25:09

+1

我在说,myPhoto.toJSON()返回一个json对象,而JSON.stringify返回一个字符串。检查这个jsfiddle看看有什么不同。 http://jsfiddle.net/saelfaer/muLjV/55/(请记住检查控制台,它在结果窗口中没有输出) – Sander 2012-01-04 10:05:12

+0

明白了!感谢例子@Sander – 2012-01-04 10:10:07

1

如果你想只显示标题,不要求处理的整个JSON照片模型。您可以检索单个属性。

下面的渲染将足以满足这里的需要。

render: function(event){ 
    var yourOutput={title:myPhoto.get('title')}; 
    var compiled_template = _.template($("#results-template").html(),yourOutput); 
    this.el.html(compiled_template);   
} 

您当前的JSON对象如下所示。这并不复杂,你可以毫不费力地获得任何标题,src,坐标,标签,位置。

{ 
    "src": "placeholder.jpg", 
    "title": "an image placeholder", 
    "coordinates": [0,0], 
    "tags": ["untagged"], 
    "location": "home" 
} 
+0

不知道你可以在json文档中评估一个表达式。那么'{title:myPhoto.get('title')}'会起作用吗? – 2012-01-04 10:12:33

+1

回答上面!你可以得到任何标题,src,坐标,标签,位置代码与上面类似。你发现JSON方法是有效的。你可以使用它:) – 2012-01-04 10:21:17