2013-01-22 14 views
17

Ho creato una vista JSON con JBuilder. Ma voglio precaricare questo in un oggetto dati, quindi Backbone ha accesso ai dati in anticipo senza doverlo recuperare.Rendering di una vista di JBuilder nella vista html

Come è possibile visualizzare la vista list.json.jbuilder nella vista list.html.erb?

normalmente senza JBuilder, mi piacerebbe fare qualcosa di simile:

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

risposta

15

render, quando viene chiamato dall'interno di una vista, restituisce un rendering di stringa del modello passato o parziale; puoi incorporare quella stringa nella tua vista come preferisci. Si noti però che:

  • È necessario aggiungere il nome del modello con il suffisso/estensione del tipo. In caso contrario, Rails potrebbe confondersi su quale file di modello stai chiamando; vale a dire: potrebbe scegliere list.html.erb anziché list.json.jbuilder. Se effettui questa chiamata dalist.html.erb, prova a eseguire il rendering di list.html.erb in ricorsione infinita e SystemStackError. L'utilizzo dell'opzione :format per render non sembra funzionare.
  • È necessario specificare il percorso qualificato per il modello; non troverà il modello giusto per "list.json" solo perché list.json.jbuilder risiede nella stessa directory di list.html.erb.
  • È necessario passare l'uscita della chiamata render tramite raw; altrimenti, verrà scappato quando viene incorporato nella vista.

Quindi, per il vostro esempio, si potrebbe scrivere questo, assumendo i modelli erano in /app/views/foo:

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

Questo è un PROTIP! Grazie. Puoi anche usare '<%== %>' invece di 'raw' –

+0

Mi è stato chiesto di rendere un partial html come json propery con jbuilder. render esegue il lavoro anche qui json.prop render (: template => 'partials/_resort_summary',: locals => {resort: @resort}) – dc10

+0

Grazie mille. Ho passato un po 'di tempo a capire come farei questo. –

Problemi correlati