2013-01-05 202 views
10

如果存在稱爲Person的骨幹模型,該模型具有屬性firstNamelastName。通常,訪問它就像person.get('firstName')person.get('lastName')如何訪問手柄模板中的骨幹模型屬性

如何在Handlebar模板中執行類似的操作,其中person已經暴露給上下文。

回答

21

當您渲染Handlebars模板時,您需要傳入模型的屬性。推薦的方法是呼叫Model.toJSON,它返回模型內部attributes散列的副本。

var template = Handlebars.compile(templateHtml); 
var rendered = template({ person: model.toJSON() }); 

在模板中,您可以通過屬性名稱訪問上下文。

<span>{{person.firstName}} {{person.lastName}}</span> 
+0

明白了。所以這個想法是將JSON暴露給模板而不是骨幹模型。 –

+3

@AkshayRawat,'Model.toJSON'被有趣地命名,因爲它返回的不是真的JSON,只是一個普通的javascript對象。如果你想要真正的JSON,你必須調用'JSON.stringify(model.toJSON())' - 但是Handlebars想要的是一個普通對象。 – jevakallio

+0

'toJSON'名稱並不是Backbone的錯,名稱由['JSON.stringify'](https://developer.mozilla.org/en-US/docs/JSON#toJSON()_method)指定。 –

6

其實我有很多地方跟.toJSON所以我開發了一個把手修改處理骨幹型號:

https://gist.github.com/4710958

它會檢查,如果值是骨幹的實例。模型,如果它是將調用.get()方法。

Backbone.Model應該是全局的才能使用它。

{{ user.address.street }} 

會被解析爲:

user.get("adress").street 
+0

這是否仍然適用於HandleBars v1.3.0?我已經把你的代碼片段放到了我的app.js中,但它似乎沒有做任何事情。 – ddewaele

+0

對不起,我不再使用把手,所以我不知道。你看到控制檯上有任何錯誤嗎?如果你這樣做,我們可以在https://gist.github.com/amatiasq/4710958繼續討論它 –