2012-01-04 68 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