Встраивание кода erb в javascript для конвейера активов - PullRequest
7 голосов
/ 23 января 2012

В моем приложении rails 3.1.3 я хотел бы вставить код ERB в мой файл javascript, но по какой-то причине он не анализируется:

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

Получается так в /application.js:

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

Я не вижу никаких дополнительных шагов в направляющих рельсов - я что-то упускаю? Кстати, я использую haml для просмотра файлов, а также пробовал выше с .js.haml, заключив в #{...}.

Ответы [ 3 ]

10 голосов
/ 23 января 2012

В вашем коде есть синтаксическая ошибка. Это:

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

должно быть так:

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

Вы пропустили закрывающий тег erb для вспомогательного блока кода.

0 голосов

В Rails 4 вместо использования js.erb я рекомендую по возможности придерживаться конвейера ресурсов и передавать переменные в J, используя gon или другой метод, обсуждаемый по адресу: Ruby on Rails -Отправить переменную JavaScript из контроллера во внешний файл ресурсов Javascript

С 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 / assets / javascripts / shared.js.coffee:

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

Этот метод быстрее, поскольку файл предварительно компилируется только один раз запри запуске, обслуживается сервером, а не через Rails, и по тому же HTTP-запросу, что и остальные J.

Конкретный вариант использования передачи URL ресурса в Javascript был задан по адресу: URL изображений в коде JavaScript с использованием конвейера ресурсов Rails 3.1?

0 голосов
/ 23 января 2012

Добавьте расширение .erb к вашему application.js, и оно должно работать.

Содержимое необходимых файлов сначала включается, а затем обрабатывается в соответствии с расширениями в манифесте.

...