Rails 3.1 / Sprockets: внедрение переменных контроллера (или помощников) в ресурсы javascript - PullRequest
2 голосов
/ 21 сентября 2011

У меня есть действие с

def new 
  @test_var = 'i want this to show'
end

Все, что я хочу сделать, это вставить это в javascript, вызываемый для этой страницы.Например:

#app/assets/javascript/my_model.js.coffee.erb
$ ->
  console.log('<%= @test_var %>')

Я предполагаю, что это не сработает, потому что coffeescript / erb компилируется до обращения к контроллеру ... так что, если я хотел вставить переменные контроллера в файл JavaScript(на стороне клиента - НЕ доступен через ajax) в 3.1, как мне это сделать?

1 Ответ

5 голосов
/ 22 сентября 2011

Я полагаю, что проблема в том, что вы думаете о том, что конвейер активов совершенно неправильный ... актив - это рабочее слово.

Это не представление конвейер.Другие вещи, которые являются активами?файлы изображений и CSS, вещи, которые могут быть предварительно обработаны и затем предоставлены как есть.Erb / предварительная обработка ваших ресурсов не происходит при каждой загрузке страницы / запросе, скорее это происходит при запуске / обмене файлами, поэтому в производственном процессе указанные ресурсы можно оптимизировать, кэшировать и обслуживать статически.

Возможно, вы могли бы выяснитьспособ добиться этого с помощью Live Compilation (см. раздел 4.2 http://guides.rubyonrails.org/asset_pipeline.html), но, как говорят документы:

В этом режиме используется больше памяти и производительность ниже, чем по умолчанию. Не рекомендуется.

Неправильным ответом будет «внедрить javascript в ваше представление», но хорошая идея отделить ваш javascript от контроллеров / представлений rails.

Лучшим ответом было бычтобы иметь папку ресурсов, содержащую все javascript-коды вашего контроллера, и использовать некоторый javascript «на какой странице я?», чтобы определить, запускать код или нет.

Вот несколько ответов, объясняющих различные подходы к этому:

Конвейер ресурсов Rails 3.1: как загрузить скрипты для контроллера?

Использование Rails3.1, куда вы помещаете свой "специфичный для страницы" код JavaScript?

...