2010-11-17 29 views
7

Existe-t-il un moyen de rendre un html.erb partiel en tant que ligne de chaîne?Ruby on Rails: Rendu HTML partiel comme une ligne de chaîne

J'essaie de rendre un _foo.html.erb partiel dans un javascript, de sorte que je puisse utiliser tout le document html comme variable de chaîne.

J'ai essayé le code suivant:

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

Et à l'intérieur _foo.html.erb, disons que je donne les résultats suivants:

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

De cette façon me donner une erreur de syntaxe en javascript parce qu'il y a CRLF dans le partiel. Mais si j'écrire du code comme ...

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

Maintenant, ce n'est pas une erreur javascript. Je peux faire le dernier chemin, mais c'est un désastre si le partiel contient beaucoup de lignes de code avec un script ruby.

Y aurait-il un autre moyen?

Merci d'avance.

Répondre

14

Utilisez la fonction escape_javascript:

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

Si vous trouvez 'escape_javascript' être trop taper, rappelez-vous qu'il est Lissé comme' j'. –

1

bidouille rapide et sale:

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

Cela remplace simplement les nouvelles lignes avec des espaces, un no-op du point de vue d'un analyseur HTML.

Cependant, il s'agit d'une manière plutôt fragile de créer des objets JavaScript. Vous devrez tenir compte des citations dans la partie qui rendra votre JavaScript invalide, etc. Je suggérerais d'essayer de créer des modèles JavaScript pour le code HTML que vous voulez afficher et de les remplir avec les versions JSON de vos modèles.