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)


Вярвам, че проблемът е, че мислите за тръбопровода на активи съвсем погрешно... актив е оперативната дума.

Това не е канал за изглед. Други неща, които са активи? изображения и css файлове, неща, които могат да бъдат предварително обработени и след това обслужвани такива, каквито са. Erb/предварителната обработка на вашите активи не се случва при всяко зареждане на страница/заявка, а по-скоро при стартиране/промяна на файл, така че в производството споменатите активи могат да бъдат оптимизирани, кеширани и обслужвани статично.

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

Този режим използва повече памет и е с по-ниска производителност от стандартния. Не се препоръчва.

Лошият отговор би бил „инжектиране на javascript във вашия изглед“, но отделянето на вашия javascript от вашите rails контролери/изгледи е добра идея.

По-добър отговор би бил да имате папка с активи, съдържаща всички ваши javascript скриптове на контролера, и да използвате някои „на коя страница съм?“ javascript, за да определи дали да изпълни кода или не.

Ето някои отговори, които обясняват различните подходи към това:

Тръбопровод за активи на Rails 3.1: как да заредите контролер- конкретни скриптове?

Използване на Rails 3.1, къде да сте поставили специфичния за вашата страница javascript код?

person timoxley    schedule 22.09.2011