2010-11-17 13 views
7

C'è un modo per eseguire il rendering di un partial html.erb come una riga di stringa?Ruby on Rails: Render HTML parziale come una riga di stringa

Sto cercando di rendere un partial _foo.html.erb all'interno di un javascript, in modo da poter utilizzare l'intero documento html come variabile stringa.

Ho provato il seguente codice:

var foo = "<%= render :partial => "foo" %>"; 

E dentro _foo.html.erb, diciamo che ho il seguente:

<h1>Hello</h1> 
<p>World</p> 

In questo modo mi darà un errore di sintassi in javascript perché c'è il CRLF nel parziale. Ma se scrivo codice come ...

<h1>Hello</h1>" + 
"<p>World</p> 

Ora, non è un errore di javascript. Posso fare il secondo modo, ma è un disastro se il partial contiene molte righe di codice con lo script ruby.

Ci sarebbe un modo alternativo?

Grazie in anticipo.

risposta

14

Utilizzare la funzione escape_javascript:

var foo = "<%= escape_javascript(render :partial => 'foo') %>"; 
+3

Se trovate 'escape_javascript' essere troppo da scrivere, ricordare che è alias come' j'. –

1

rapido e sporco trucco:

var foo = "<%= render(:partial => "foo").gsub(/[\n\r]/, ' ') %>"; 

Questo sostituisce solo le nuove righe con gli spazi, un no-op, dal punto di vista di un parser HTML.

Tuttavia, questo è un modo piuttosto fragile per creare oggetti JavaScript. Dovrai tenere conto delle citazioni nel partial che renderanno il tuo JavaScript non valido, ecc. Suggerirei di provare a creare modelli JavaScript per l'HTML che desideri rendere e popolarli con le versioni JSON dei tuoi Modelli.