2015-08-25 14 views
6

Hier ist, was ich in meiner Sicht haben:Wie verwende ich javascript_include_tag mit js.erb-Datei in Rails 4?

<%= javascript_include_tag "social_sharing.erb" %> 

Dann habe ich: assets/javascripts/social_sharing.erb.js die einige ERB-Tags wie <%= post.id %> enthält ...

Das erste Problem ist, ich diese Fehlermeldung:

`Asset filtered out and will not be served: add `Rails.application.config.assets.precompile += %w(social_sharing.erb.js)` to `config/initializers/assets.rb` and restart your server 

Wenn ich diesen Anweisungen folge, bekomme ich dann die js-Datei geliefert, aber keiner der ERB-Tags wurde ausgewertet, so dass ich immer noch <%= post.id %> in der verknüpften js-Datei sehe.

+1

Sie sollten Name "js.erb" sein und '<% = javascript_include_tag" social_sharing "%>' ist genug. –

+0

Ha. Ups, danke. – Abram

Antwort

9

Die Datei sollte den Namen assets/javascripts/social_sharing.js.erb (mit .ERB am Ende) haben, andernfalls weiß die Rails-Asset-Pipeline nicht, sie zu verarbeiten und wird sie so bedienen, als wäre es reines JavaScript. Das Include-Tag sollte <%= javascript_include_tag "social_sharing.js" %> anstelle von .erb lesen, obwohl the .js is optional.

Alles im Ordner Assets wird durch die asset pipeline verarbeitet und kann leicht mit asset helper tags eingezogen werden.

JEDOCH sind und die Asset-Pipeline für wirklich statische Assets, die nur einmal vorkompiliert werden und dann die gleiche Datei mit jeder relevanten Anfrage geliefert wird. Wenn Sie versuchen, dynamischen Inhalt wie <%= post.id %>10 einzufügen, der von Anforderung zu Anforderung variiert, möchten Sie die Datei .js.erb wahrscheinlich an einen beliebigen Ort im Verzeichnis views verschieben und als Teildarstellung rendern, ähnlich der ersten Antwort für this question:

<script> 
    render partial: '[somewhere]/social_sharing', post: @post 
</script> 

müssen die Datei _social_sharing.js.erb auch umbenannt werden.

+0

Irgendeine Idee, wie man meine Schienenvariablen in der js.erb arbeiten lässt? Zum Beispiel ist "post" null – Abram

+0

Die erste Antwort [hier] (https://stackoverflow.com/questions/13287588/what-is-the-scope-of-ruby-code-in-a-js-erb- Datei-und-wie-kann-es-Zugriff-Controller) könnte helfen, müssen Sie möglicherweise die .js.erb als Teil innerhalb eines

2

Ich bin mir nicht sicher, dass dies die Antwort ist, aber was Sie mit Ihrer Asset-Pipeline gegenüber dem Javascript tun, sieht ungewöhnlich aus.

Fügen Sie diese Zeile in Ihre Datei /config/initalizers/assets.rb ein, um die js in Ihre Asset-Vorkompilierung aufzunehmen.

Rails.application.config.assets.precompile += %w(social_sharing.js) 

Ich denke, wenn Sie diese Datei in Ihrer Asset-Pipeline Kompilation enthalten Sie nicht die javascript_include_tag überhaupt verwenden müssen.

Wenn Sie dies versuchen, lassen Sie mich bitte, wenn Sie immer noch den Fehler und oder das Rendering-Problem haben.

+0

Hi, das ist normalerweise das, was ich mache, aber ich wollte es auf einer einzigen Seite einfügen, sorry. – Abram

+0

"Einbinden in eine einzelne Seite" Alle Assets in Rails werden kompiliert, sogar Bibliotheken wie jquery werden in application.js kompiliert. Du hast einen hohen Ruf in RoR (Profil), also kennst du dieses Zeug. Also ich denke, ich bin mir nicht sicher, was du willst. – Elvn

+0

Hey im Grunde habe ich nur versucht, ein Snippet von js aus meiner html.erb-Datei zu verschieben, habe aber immer noch die Instanzvariablen für die js .. Ich denke 'javascript_include_tag' ist mehr für statische Assets, etc .. So war ich wahrscheinlich Dinge auf den falschen Weg bringen. Ihre Antwort ist nicht falsch, also werde ich Sie auffrischen. – Abram

Verwandte Themen