Question

J'ai un Rails 3.1 application qui utilise le codebrew / épine dorsale-rails . Dans un modèle .jst.ejs, je voudrais inclure une image, comme suit:

<img src="<%= image_path("foo.png") %>"/>

Mais bien sûr, les aides d'actifs ne sont pas disponibles en JavaScript.

Enchaînement ERB (.jst.ejs.erb) ne fonctionne pas, parce que les conflits de syntaxe EJS avec ERB.

Voici ce que je sais:

  • Les aides d'actifs ne sont pas disponibles dans le navigateur, donc je dois les exécuter sur le côté serveur.
  • je peux contourner le problème en faisant le vidage du serveur différents chemins d'actifs dans le code HTML (par des attributs de données ou <script> et JSON) et les relisant à JS, mais cela semble plutôt kludgy.

Y at-il un moyen d'utiliser une certaine façon les aides d'actifs dans les fichiers EJS?

Était-ce utile?

La solution

Il y a une façon, en fait, à la chaîne un fichier .jst.ejs.erb, bien qu'il soit assez en situation irrégulière, et je ne trouve à travers regardant les cas de test EJS. Vous pouvez dire EJS à utiliser {{}} (ou [%%] ou tout ce que vous voulez) au lieu de <%%>, puis ERB ne tentera pas d'évaluer vos appels EJS.

Assurez-vous d'exiger EJS quelque part dans votre code (je viens inclus gem 'ejs' dans mon Gemfile), puis créez un initialiseur (je l'ai appelé ejs.rb) qui comprend les éléments suivants:

EJS.evaluation_pattern    = /\{\{([\s\S]+?)\}\}/
EJS.interpolation_pattern = /\{\{=([\s\S]+?)\}\}/

Ensuite, il suffit de renommer vos modèles pour .jst.ejs.erb et remplacer votre actuelle <%%> EJS-interprété avec le code {{}}. Si vous voulez utiliser autre chose que {{}}, changer les expressions régulières dans l'initialiseur.

Je souhaite qu'il y ait une option Pignons pour gérer ce à travers la configuration plutôt que d'avoir à inclure explicitement EJS, mais du moment, il n'y a aucun moyen de le faire que je connaisse.

Autres conseils

Je vois deux façons. Ni sont grands.

Quand vous dites <%%= variable %> alors ceci est rendu par ERB comme <%= variable %>, de sorte que vous pourriez doubler pour cent tout d'échappement mais les asset_tags et qui survivraient le voyage à travers un passage de ERB sur le chemin de EJS.

Si vous trouvez que trop grossier ...

Que diriez-vous faire un fichier javascript différent, avec une extension ERB, qui définit vos chemins d'actifs? Et puis utiliser le pipeline d'actifs pour exiger que.

Donc, dire quelque chose comme assets.js.erb définit:

MyAssets = {
  'foo': <%= image_path("foo.png") %>,
  ...
}

Et puis besoin de ce quelque part près du haut de votre manifeste. Et puis référence globals cependant que les travaux dans EJS.

Pour ceux qui sont prêts à essayer HAML au lieu de EJS: Utiliser haml-café par haml_coffee_assets a bien fonctionné pour moi aussi.

Vous pouvez avoir les éléments suivants dans un fichier .hamlc.erb:

%img(src="<%= image_path('foo.png') %>")

(Il ne reste de routage vous donne pas des aides cependant, que les aides d'actifs).

Ryan Fitzgerald a bien voulu écrire un point essentiel de ses aides d'actifs JavaScript (qui se précompilés avec ERB): https: //gist.github.com/1406349

Vous pouvez utiliser correspondant assistant Javascript via la gemme suivante: https://github.com/kavkaz/js_assets

Enfin (après l'installation et la configuration), vous pourrez l'utiliser comme ceci:

<img src="<%= asset_path("foo.png") %>"/>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top