2012-11-15 13 views
15

Ich muss Bilder auf einem HTML5-Canvas anzeigen, die sich in der Rails-Asset-Pipeline befinden, aber ich muss den Pfad für das Asset von JavaScript kennen. Ich verwende js-routes für andere Teile der Anwendung, aber es scheint keine Möglichkeit zu bieten, den Pfad zu etwas in der Asset-Pipeline zu bekommen.Erfassen von Asset-Pfad von JavaScript

Was ist der richtige Weg, um den Pfad zu einem Rails Asset (z. B. ein Bild) von JavaScript zu erhalten?

Antwort

18

In den Rails Asset Pipeline guide geben sie ein Beispiel für die Kodierung von Assets in Ihren Stylesheets durch Vorverarbeitung der Stylesheets mit ERB. Sie können die gleiche Technik mit JavaScript verwenden, können Sie zum Ende des Dateinamens ein .erb unter der Annahme, tack:

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

Dank für die schnelle Antwort Vielen .... Ich dachte, dies zu tun, aber könnte es viele verschiedene sein Assets, zu denen ich den Pfad haben möchte, sodass dies mühsam werden und zu einem Wartungsalphabet werden kann, wenn Assets hinzugefügt oder entfernt werden. Ich habe auch überlegt, eine eigene Aktionsmethode zu erstellen, um die URL für den angegebenen Assetnamen zurückzugeben, aber ich hatte gehofft, eine bessere Alternative zu finden. – senfo

+4

Ich persönlich denke, das ist ein schrecklicher Vorschlag, obwohl es lebensfähig ist. Rails ist kein JavaScript-Precompiler. –

+1

@ArxPoetica, warum haben sie CoffeeScript aufgenommen, das mit JavaScript kompiliert wird? – Mischa

6

Kasse die js_assets(Javascript helper in rails projects) gem. Ich denke, es ist genau das, was Sie brauchen.

Aus der Dokumentation:

den Pfad zur Vorlage App Get/assets/Javascripts/Rubriken/views/index.html in javascript: var path = asset_path('rubrics/views/index.html')

5

Für diejenigen mit HAML können Sie tun:

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

Ich musste doppelte Anführungszeichen verwenden, um es zur Arbeit zu bringen, aber danke, dass Sie mich auf den richtigen Weg gebracht haben. – cubsker

6

Warum nicht ein Datenattribut für den Pfad innerhalb eines Elements in Ihrer ERB-Datei hinzufügen und dieses dann mit JQuery abrufen?

innen some_template.html.erb

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

dann in some_javascript.js

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

Ich mag diesen Vorschlag. Anstatt .erb an Ihre js-Datei anzuhängen. – kev

+1

Ich mag das auch, denn wenn Sie eine Variable verwenden müssen, die von Javascript in Ihrem Image-Pfad abgeleitet ist, können Sie den Asset-Pfad nicht mit erb injection verwenden. –