2015-08-25 14 views
6

Ecco quello che ho nel mio punto di vista:Come utilizzare javascript_include_tag con il file js.erb in Rails 4?

<%= javascript_include_tag "social_sharing.erb" %> 

allora ho: assets/javascripts/social_sharing.erb.js che comprende alcuni tag ERB come <%= post.id %> ...

Il primo problema è che vedo questo messaggio di errore:

`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 

Se seguo queste indicazioni, ottengo quindi il file js servito, ma nessuno dei tag ERB è stato valutato, quindi vedo ancora <%= post.id %> nel file js collegato.

+1

il nome del campo deve essere 'js.erb' E' <% = javascript_include_tag "social_sharing"%> 'è sufficiente. –

+0

Ha. Oops grazie. – Abram

risposta

9

Il file deve essere denominato assets/javascripts/social_sharing.js.erb (con .erb alla fine), altrimenti la pipeline di risorse Rails non saprà elaborarlo e lo servirà come se fosse un semplice JavaScript. Il tag include dovrebbe leggere <%= javascript_include_tag "social_sharing.js" %> anziché .erb, sebbene the .js is optional.

Tutto nella cartella delle risorse verrà elaborato tramite asset pipeline e può essere facilmente inserito con asset helper tags.

TUTTAVIA, javascript_include_tag e la pipeline di asset sono per le risorse veramente statiche che verranno precompilate solo una volta e quindi lo stesso file servito con ogni richiesta pertinente. Se stai cercando di includere contenuti dinamici come <%= post.id %> che variano da richiesta a richiesta, probabilmente vorrai spostare il file .js.erb in qualche punto della directory views e renderlo come parziale, simile alla prima risposta per this question:

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

dovrà essere rinominato _social_sharing.js.erb pure il file.

+0

Qualche idea su come far funzionare le mie variabili di rotaie su js.erb? Ad esempio, 'post' è nil – Abram

+0

La prima risposta [qui] (https://stackoverflow.com/questions/13287588/what-is-the-scope-of-ruby-code-in-a-js-erb- controller di file-e-come-it-it-access-controller) potrebbe essere utile, potrebbe essere necessario rendere il .js.erb come parziale all'interno di un tag

2

Non sono sicuro che questa sia la risposta, ma quello che stai facendo con la tua pipeline di asset di fronte al javascript sembra inusuale.

Per includere il js nelle risorse precompilare aggiungere questa riga nel file /config/initalizers/assets.rb.

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

Penso che una volta si include questo file nella compilation risorsa gasdotto non è necessario utilizzare il javascript_include_tag a tutti.

Se si prova questo, per favore fatemi se avete ancora l'errore eo il problema di rendering.

+0

Salve, questo è tipicamente quello che faccio, ma volevo includerlo in una singola pagina, mi dispiace. – Abram

+0

"includilo in una singola pagina" Tutte le risorse nei binari sono compilate, anche le librerie come jquery sono compilate in application.js. Hai un alto rappresentante in RoR (profilo), quindi conosci questa roba. Quindi immagino, non sono sicuro di cosa stai andando. – Elvn

+0

Ehi, in pratica stavo solo cercando di spostare uno snippet di js dal mio file html.erb, ma ho ancora le variabili di istanza disponibili per il js. Suppongo che 'javascript_include_tag' è più per le risorse statiche, ecc. Quindi probabilmente ero avvicinarsi alle cose nel modo sbagliato per cominciare. La tua risposta non è sbagliata, quindi ti rinnegherò. – Abram