Rails 3.1/Sprockets: внедрение переменных контроллера (или помощников) в активы javascript

у меня акция с

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, как мне это сделать?


person PlankTon    schedule 21.09.2011    source источник


Ответы (1)


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

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

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

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

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

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

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

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

Использование Rails 3.1, где вы помещаете код javascript для своей страницы?

person timoxley    schedule 22.09.2011