2013-01-22 185 views
17

我已經使用JBuilder創建了json視圖。但是我想將它預先加載到數據對象中,所以Backbone可以在不提取數據的情況下儘早訪問數據。在html視圖中渲染JBuilder視圖

我怎樣才能使list.json.jbuilder視圖到我list.html.erb看法?

通常沒有JBuilder的,我會做這樣的事情:

<div data-list="<%= @contents.to_json %>"></div> 

回答

15

render,從視圖中調用時,返回傳入模板或部分的字符串呈現;您可以將該字符串嵌入視圖中。儘管如此請注意:

  • 您必須在類型後綴/擴展名後附加模板名稱。如果你不這樣做,Rails可能會對你所調用的模板文件感到困惑;即:它可以選擇list.html.erb而不是list.json.jbuilder。如果您打電話list.html.erb,試圖呈現list.html.erb導致無限遞歸和SystemStackError。對render使用:format選項似乎不起作用。
  • 您必須指定模板的合格路徑;它不會僅僅因爲list.json.jbuilderlist.html.erb位於同一個目錄中而找到「list.json」的正確模板。
  • 您需要將render調用的輸出通過raw;否則,當它嵌入到視圖中時,它會被轉義。

所以,你的榜樣,你可能會這樣寫,假設你的模板,在/app/views/foo

<div data-list="<%= raw render(:template => "foo/list.json", :locals => { :contents => @contents }) %>"></div> 
+2

這是這樣一個普羅蒂普!謝謝。你也可以使用'<%== %>'而不是'raw' –

+0

我被挑戰使用jbuilder渲染一個html部分爲json propery。 json.prop render(:template =>'partials/_resort_summary',:locals => {resort:@resort}) – dc10

+0

非常感謝。我花了相當長的一段時間搞清楚我該怎麼做。 –