2010-11-17 3 views
7

Gibt es eine Möglichkeit, eine html.erb teilweise als eine Zeile der Zeichenfolge zu rendern?Ruby on Rails: Render HTML teilweise als eine Zeile der Zeichenfolge

Ich versuche, eine _foo.html.erb teilweise in einem Javascript, so dass ich das gesamte HTML-Dokument als String-Variable verwenden kann.

Ich habe den folgenden Code versucht:

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

Und innerhalb _foo.html.erb, sagen wir, ich habe folgendes:

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

Auf diese Weise mich in Javascript einen Syntaxfehler geben weil CRLF im partiellen ist. Aber wenn ich Code schreiben, wie ...

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

Nun, es ist nicht ein Fehler in Javascript. Ich kann den letzteren Weg tun, aber es ist eine Katastrophe, wenn die teilweise enthält viele Zeilen Code mit Ruby-Skript.

Gibt es einen alternativen Weg?

Vielen Dank im Voraus.

Antwort

14

Verwenden escape_javascript Funktion:

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

Wenn Sie feststellen, 'escape_javascript' zu viel zu sein, zu geben, denken Sie daran, dass sie als 'J' aliased ist. –

1

quick and dirty Hack:

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

Dies ersetzt nur die Zeilenumbrüche mit Leerzeichen, eine no-op aus der Sicht eines HTML-Parser.

Dies ist jedoch eine ziemlich zerbrechliche Möglichkeit, JavaScript-Objekte zu erstellen. Sie müssen Anführungszeichen im Teil berücksichtigen, die Ihr JavaScript ungültig machen usw. Ich würde vorschlagen, JavaScript-Vorlagen für den HTML-Code zu erstellen, der gerendert werden soll, und sie mit JSON-Versionen Ihrer Modelle zu füllen.