2013-01-22 10 views
17

Ich habe eine JSON-Ansicht mit JBuilder erstellt. Aber ich möchte das in ein Datenobjekt laden, so dass Backbone früh auf die Daten zugreifen kann, ohne dafür Daten abzurufen.Rendern einer JBuilder-Ansicht in der HTML-Ansicht

Wie kann ich die list.json.jbuilder-Ansicht in meine list.html.erb-Ansicht rendern?

Normalerweise ohne jbuilder, würde ich so etwas tun:

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

Antwort

15

render, wenn innerhalb einer Ansicht aufgerufen wird, gibt ein String-Rendering der übergebenen Vorlage oder teilweise; Sie können diese Zeichenfolge in Ihre Ansicht einbetten, wie Sie möchten. Beachten Sie jedoch Folgendes:

  • Sie müssen Ihren Vorlagennamen mit dem Typ Suffix/Erweiterung anfügen. Wenn Sie dies nicht tun, kann Rails verwirrt werden, welche Vorlagendatei Sie aufrufen. zB: es könnte list.html.erb statt list.json.jbuilder wählen. Wenn Sie diesen Aufruf vonlist.html.erb aufrufen, führt das Rendern list.html.erb zu einer unendlichen Rekursion und einem SystemStackError. Die Verwendung der Option :format für render scheint nicht zu funktionieren.
  • Sie müssen den qualifizierten Pfad zur Vorlage angeben; Es wird nicht die richtige Vorlage für "list.json" finden, nur weil sich list.json.jbuilder im selben Verzeichnis wie list.html.erb befindet.
  • Sie müssen die Ausgabe des render Anrufs durch raw übergeben; Andernfalls wird es ausgeblendet, wenn es in die Ansicht eingebettet wird.

Also, für Ihr Beispiel könnte schreiben Sie diese, Ihre Vorlagen in /app/views/foo waren unter der Annahme:

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

! Vielen Dank. Sie können auch '' anstelle von 'raw' verwenden –

+0

Ich wurde aufgefordert, ein HTML teilweise als Json Propery mit Jbuilder zu rendern. render macht den Job auch hier json.prop render (: template => 'partials/_resort_summary',: einheimische => {resort: @resort}) – dc10

+0

Vielen Dank. Ich habe lange Zeit darüber nachgedacht, wie ich das machen würde. –

Verwandte Themen