Domanda

Ho un 3.1 applicazione Rails che utilizza la codebrew / spina dorsale-rails . In un modello di .jst.ejs, vorrei includere un'immagine, in questo modo:

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

Ma, naturalmente, gli aiutanti di attività non sono disponibili in JavaScript.

Il concatenamento ERB (.jst.ejs.erb) non funziona, perché i conflitti di sintassi EJS con ERB.

Ecco quello che so:

  • Gli helper di attivi non sono disponibili nel browser, quindi ho bisogno di eseguirli sul lato server.
  • I può aggirare il problema, rendendo i vari percorsi di attività di dump server nel formato HTML (tramite attributi dei dati o <script> e JSON) e la loro lettura nel JS, ma questo sembra piuttosto kludgy.

C'è un modo per utilizzare in qualche modo i collaboratori attivi nei file EJS?

È stato utile?

Soluzione

C'è un modo, in realtà, a catena un file .jst.ejs.erb, anche se è abbastanza documentato, e ho trovato solo attraverso guardando i casi di test EJS. Si può dire EJS all'uso {{}} (o [%%] o qualsiasi altra cosa che si desidera) al posto di <%%>, e quindi ERB non cercherà di valutare le chiamate EJS.

Assicurati di richiedere EJS da qualche parte nel codice (ho appena gem 'ejs' incluso nel mio Gemfile), e quindi creare un inizializzatore (ho chiamato ejs.rb) che include quanto segue:

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

Poi basta fare in modo di rinominare i modelli per .jst.ejs.erb, e sostituire il vostro attuale <%%> EJS-interpretato codice con {{}}. Se si desidera utilizzare qualcosa di diverso da {{}}, modificare le espressioni regolari nel inizializzatore.

Vorrei che ci fossero un'opzione in Pignoni per gestire questo attraverso la configurazione, piuttosto che dover includere esplicitamente EJS, ma come del momento, non c'è modo di farlo, che io sappia.

Altri suggerimenti

Posso vedere due modi. Né sono grandi.

Quando si dice <%%= variable %> allora questo è reso dal ERB come <%= variable %>, così si potrebbe raddoppiare per cento fuga tutto ma le asset_tags e che sarebbe sopravvivere al viaggio attraverso un passaggio ERB sulla strada per EJS.

Se si scopre che anche lordo ...

Come di fare un file JavaScript diverso, con un'estensione ERB, che definisce i percorsi di attività? E quindi utilizzare il gasdotto risorsa per richiedere che.

Così dicono definisce assets.js.erb qualcosa del tipo:

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

E poi richiede questo da qualche parte vicino alla parte superiore del vostro manifesto. E quindi fare riferimento alle variabili globali, tuttavia, che lavori in EJS.

Per coloro che sono disposti a provare HAML invece di EJS: Utilizzando Haml-caffè tramite haml_coffee_assets ha funzionato bene per me.

È possibile avere il seguente in un file .hamlc.erb:

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

(E ancora non ti dà il routing aiutanti però, solo aiutanti di attività).

Ryan Fitzgerald stato così gentile da inviare un succo dei suoi aiutanti di asset JavaScript (che vengono precompilati utilizzati con ERB): https: //gist.github.com/1406349

È possibile utilizzare corrispondente Javascript aiuto tramite il seguente perla: https://github.com/kavkaz/js_assets

Finalmente (dopo l'installazione e la configurazione) si sarà in grado di utilizzare in questo modo:

<img src="<%= asset_path("foo.png") %>"/>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top