2012-01-23 15 views
7

Nei miei rotaie 3.1.3 app, vorrei inserire del codice ERB nel mio file javascript, ma non è di essere analizzato per qualche motivo:Incorporare codice erb in javascript per la conduttura di asset

# app/assets/javascripts/application.js 
//= require_tree ./shared 

# app/assets/javascripts/shared/shared.js.erb 
MM.loading = '<img src="<%= asset_path("icons/ajax-loader.gif") >">'; 

Gets resi come questo in /application.js:

MM.loading = '<img src=" asset_path("icons/ajax-loader.gif") >">'; 

non riesco a vedere alcun passo in più nelle rotaie guide - c'è qualcosa che mi manca? Btw sto usando haml per i file di visualizzazione, e ho anche provato quanto sopra con .js.haml, allegando in #{...}.

risposta

10

Si è verificato un errore di sintassi nel codice. Questo:

MM.loading = '<img src="<%= asset_path("icons/ajax-loader.gif") >">'; 

dovrebbe essere questo:

MM.loading = '<img src="<%= asset_path("icons/ajax-loader.gif") %>">'; 

ti mancava il tag erb di chiusura per il blocco aiutante di codice.

+0

Ah, ben individuato ... è stato tutto! – Zubin

+0

Oh bene, mi ha portato due colpi. –

-2

Aggiungi un'estensione .erb al file application.js e dovrebbe funzionare.

Il contenuto dei file richiesti viene incluso per primo, quindi elaborato secondo le estensioni sul manifest.

+0

buona idea, ma non ha funzionato per me. Ho provato 'console.log (" 1 + 1 = <% = puts 1 + 1%> ");' in 'shared.js.erb' dopo aver aggiunto' .erb' a ​​manifest filename. – Zubin

+0

Questo non era richiesto. Dopo aver corretto le parentesi, ha funzionato senza aggiungere .erb sul nome file manifest. – Zubin

0

In Rails 4, invece di utilizzare una vista js.erb, vi consiglio di bastone alla pipeline di asset, quando possibile, e passare delle variabili al Js utilizzando gon o qualche altra tecnica discusso a: Ruby on Rails - Send JavaScript variable from controller to external Javascript asset file

Con gon:

app/views/layout/application.html.erb:

<head> 
    <meta charset="utf-8"/> 
    <%= include_gon %> 

app/controllers/application_controller.rb:

0.123.
before_filter { gon.path = asset_path('icons/ajax-loader.gif') } 

app/beni/javascript/shared.js.coffee:

MM.loading = '<img src="' + gon.path + '">'; 

Questo metodo è più veloce perché il file è precompilata solo una volta in fase di avvio, viene servito dal server invece che attraverso Rails, e sulla stessa richiesta HTTP come il resto del Js.

La particolare caso d'uso di passare un URL risorsa per JavaScript è stato chiesto a: URL of images in JavaScript code using Rails 3.1 asset pipeline?

Problemi correlati