Вопрос

У меня есть приложение Rails 3.1, которое использует Codebrew/Backbone-Rails. Анкет В шаблоне .jst.ejs я хотел бы включить изображение, например, так:

<img src="<%= image_path("foo.png") %>"/>

Но, конечно, помощники активов недоступны в JavaScript.

Цепочка Erb (.jst.ejs.erb) не работает, потому что синтаксис EJS конфликтует с Erb.

Вот что я знаю:

  • Помощники активов недоступны в браузере, поэтому мне нужно запустить их на стороне сервера.
  • Я могу обойти эту проблему, заставив сервер сбрасывать различные пути активов в HTML (через атрибуты данных или <script> и json) и читать их обратно в JS, но это кажется довольно Kludgy.

Есть ли способ каким -то образом использовать помощников активов в файлах EJS?

Это было полезно?

Решение

На самом деле есть способ цеповать файл. Вы можете сказать EJS использовать {{}} (или [ % %] или что -то еще, что вы хотите) вместо < % %>, а затем ERB не попытается оценить ваши вызовы EJS.

Обязательно требуют EJ где -то в вашем коде (я только что включил gem 'ejs' В моем Gemfile), а затем создайте инициализатор (я назвал его ejs.rb), который включает в себя следующее:

EJS.evaluation_pattern    = /\{\{([\s\S]+?)\}\}/
EJS.interpolation_pattern = /\{\{=([\s\S]+?)\}\}/

Затем просто убедитесь, что переименуйте свои шаблоны в. Если вы хотите использовать что -то другое, кроме {{}}, измените регулярные выражения в инициализаторе.

Я хотел бы, чтобы в Sprockets была возможность обрабатывать это через конфигурацию, а не явно включать EJS, но на данный момент нет никакого способа сделать это, о котором я знаю.

Другие советы

Я вижу два способа. Ни один из них не отлично.

Когда ты говоришь <%%= variable %> тогда это отображается Эрб как <%= variable %>, так что вы могли бы удвоить процент избежать всего но Asset_tags, и это выживет в поездке через один проход ERB по дороге к EJS.

Если вы найдете это слишком грубым ...

Как насчет того, чтобы сделать другой файл JavaScript с расширением ERB, который определяет ваши пути активов? А затем используйте конвейер активов, чтобы потребовать этого.

Так скажи assets.js.erb Определяет что -то вроде:

MyAssets = {
  'foo': <%= image_path("foo.png") %>,
  ...
}

А затем потребуется это где -то на вершине вашего манифеста. А затем ссылайся на глобалов, однако, что работает в EJS.

Для тех, кто хочет попробовать HAML, а не EJS: Использование Хэмл-коффи через haml_coffee_assets хорошо работал и для меня.

Вы можете иметь следующее в файле .hamlc.erb:

%img(src="<%= image_path('foo.png') %>")

(Это все еще не дает вам помощников по маршрутизации, только помощники активов.)

Райан Фицджеральд был достаточно любезен, чтобы опубликовать суть своих помощников актива JavaScript (которые предварительно скомпилируются ERB): https://gist.github.com/1406349

Вы можете использовать соответствующего помощника JavaScript через следующий драгоценный камень:https://github.com/kavkaz/js_assets

Наконец (после установки и настройки) вы сможете использовать его так:

<img src="<%= asset_path("foo.png") %>"/>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top