2012-11-15 11 views
15

Ho bisogno di visualizzare le immagini su un canvas HTML5 che si trova nella pipeline degli asset di Rails, ma ho bisogno di conoscere il percorso della risorsa da JavaScript. Sto usando js-routes per altre parti dell'applicazione, ma non sembra fornire un modo per ottenere il percorso verso qualcosa nella pipeline degli asset.Acquisisci traccia asset da JavaScript

Qual è il modo corretto per ottenere il percorso di un asset Rails (ad es. Un'immagine) da JavaScript?

risposta

18

Nei Rails Asset Pipeline guide, forniscono un esempio di risorse di codifica nei fogli di stile preelaborando i fogli di stile con ERB. È possibile utilizzare la stessa tecnica con JavaScript, supponendo che dovete aggiungere un .erb alla fine del nome del file:

var someAssetPath = "<%= asset_path('some_image.png') %>"; 
+0

Grazie per la rapida risposta .... ho pensato di fare questo, ma ci potrebbero essere molti diversi le risorse a cui vorrei il percorso, quindi questo potrebbe diventare ingombrante e trasformarsi in un incubo di manutenzione man mano che le risorse vengono aggiunte o rimosse. Ho anche considerato di creare il mio metodo di azione per restituire l'URL per il nome dell'asset fornito, ma speravo di trovare un'alternativa migliore. – senfo

+4

Personalmente ritengo che questo sia un terribile suggerimento, anche se è fattibile. Rails non è destinato a essere un precompilatore JavaScript. –

+1

@ArxPoetica, quindi perché hanno abbracciato CoffeeScript che compila in JavaScript? – Mischa

6

Acquista il js_assets(Javascript helper in rails projects) gemma. Penso che sia proprio quello di cui hai bisogno.

Dalla documentazione:

ottenere il percorso per il modello di applicazione/beni/javascript/rubriche/views/index.html in javascript: var path = asset_path('rubrics/views/index.html')

5

Per coloro che utilizzano HAML è possibile fare:

:javascript 
    var assetPath = "#{asset_path('some_image.jpg')}"; 
+1

Ho dovuto usare le virgolette per farlo funzionare, ma grazie per avermi trovato sulla strada giusta. – cubsker

6

Perché non aggiungere un attributo di dati per il percorso all'interno di un elemento nel file .erb e quindi recuperarlo con JQuery?

all'interno some_template.html.erb

<%= content_tag(:div, "", id: 'some-id', data:{path_to_asset: asset_path("some_image.png")}) %> 

poi nel some_javascript.js

var assetPath = $("#some-id").data("pathToAsset"); 
+0

mi piace questo suggerimento. Invece di aggiungere .erb al tuo file js. – kev

+1

Mi piace anche questo, perché se hai bisogno di usare una variabile derivata da javascript nel tuo percorso immagine, non puoi usare il percorso di asset con erb injection. –

Problemi correlati