2010-11-17 5 views
7

¿Hay alguna manera de representar un html.erb parcial como una línea de cadena?Ruby on Rails: Render HTML parcial como una línea de cadena

Estoy tratando de hacer un _foo.html.erb parcial dentro de un javascript, de modo que pueda usar todo el documento html como una variable de cadena.

He intentado el siguiente código:

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

Y _foo.html.erb dentro, digamos que tengo el siguiente:

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

De esta manera me dará un error de sintaxis en javascript porque hay CRLF en el parcial. Pero si escribo código como ...

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

Ahora bien, no es un error de JavaScript. Puedo hacer esto último, pero es un desastre si el parcial contiene muchas líneas de código con el script de ruby.

¿Habría alguna manera alternativa?

Gracias de antemano.

Respuesta

14

Uso función escape_javascript:

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

Si encuentra 'escape_javascript' a ser demasiado para escribir, recuerde que tiene el alias' J'. –

1

rápido y sucio truco:

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

Esto sólo reemplaza los saltos de línea con espacios, un op-no desde el punto de vista de un analizador de HTML.

Sin embargo, esta es una forma bastante frágil de crear objetos de JavaScript. Deberá contabilizar las cotizaciones en el parcial que harán que su JavaScript sea inválido, etc. Sugeriría que intente crear plantillas de JavaScript para el HTML que desea representar y rellenarlas con las versiones JSON de sus Modelos.