2012-01-23 14 views
7

En mis rieles 3.1.3 aplicación, me gustaría insertar algún código ERB en mi archivo javascript, pero no está siendo analizada por alguna razón:incrustación de código erb en javascript para la tubería de activos

# 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") >">'; 

Obtiene prestados como este en /application.js:

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

no puedo ver ningún paso adicional en las guías de carriles - ¿hay algo que me falta? Por cierto estoy usando haml para los archivos de vista, y también intenté lo anterior con .js.haml, adjuntando en #{...}.

Respuesta

10

Tiene un error de sintaxis en su código. Este:

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

debe ser la siguiente:

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

Usted fue echa en falta la etiqueta erb de cierre para el bloque de código auxiliar.

+0

Ah, bien visto ... ¡eso es todo! – Zubin

+0

Oh, bueno, me llevó dos tiros. –

-2

Agregue una extensión .erb a su application.js y debería funcionar.

El contenido de los archivos necesarios se incluye primero, luego se procesa de acuerdo con las extensiones en el manifiesto.

+0

buena idea, pero no funcionó para mí. Intentó 'console.log (" 1 + 1 = <% = puts 1 + 1%> ");' en 'shared.js.erb' después de agregar' .erb' al nombre del archivo de manifiesto. – Zubin

+0

Esto no fue requerido. Después de corregir los corchetes funcionó sin agregar .erb en el nombre de archivo de manifiesto. – Zubin

0

En los carriles 4, en lugar de utilizar una vista js.erb, recomiendo que se adhieren a la tubería activo siempre que sea posible, y paso variables al Js utilizando gon o alguna otra técnica discutir en: Ruby on Rails - Send JavaScript variable from controller to external Javascript asset file

Con gon:

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

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

app/controllers/application_controller.rb:

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

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

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

Este método es más rápido porque el archivo se precompila una sola vez en el arranque, consigue servido por el servidor en lugar de a través de los carriles, y en el misma solicitud HTTP que el resto de las Js.

El caso de uso particular de pasar una URL de activos a Javascript se le preguntó en: URL of images in JavaScript code using Rails 3.1 asset pipeline?

Cuestiones relacionadas