erb w skrypcie coffee z rails 3.1

Chciałbym użyć jakiegoś erb w moich plikach .coffee, jak w poniższym przykładzie

myLatlng: new google.maps.LatLng(<%[email protected] %>, <%[email protected] %>)

Przemianowałem moje locations.js.coffee na locations.erb.coffee

Ale nadal dostaję następujący błąd

Error compiling asset application.js:
ExecJS::ProgramError: Error: Parse error on line 4: Unexpected 'COMPARE'
  (in /Users/denisjacquemin/Documents/code/projects/geolog/app/assets/javascripts/locations.erb.coffee)
Served asset /application.js - 500 Internal Server Error
Author: denisjacquemin, 2011-06-28

5 answers

Jeśli chcesz erb w plikach .coffee w folderze widoku, Zostaw swój plik o nazwie yourfilename.js.coffee, A Rails nadal będzie przetwarzał ERB, co dziwne.

Aby to działało w Heroku, przenieś coffee-rails z grupy aktywów w swoim Gemfile.

 75
Author: Arcolye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-09 01:14:43

Być może będziesz musiał zmienić nazwę pliku NA lokalizacje.kawa.erb więc erb jest przetwarzany przed kawą:)

 13
Author: Clément,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-28 10:11:33

W Rails 3.2.8 nie musiałem przenosić mojegoplik coffee do /app/views. Właśnie dodałem .erb do nazwy pliku i zostawił go w /app/assets / javascripts. Ie. Zmieniłem

/app/assets/javascripts/user_answers.coffee.js to 
/app/assets/javascripts/user_answers.coffee.js.erb

I wtedy to zadziałało:

# Note the level of indentation.
var x = 2;

<% Question.first(2).each do |eq| %>
alert('eq: ' + <%= eq.id %>)
<% end %>

(poziom wcięcia musi pasować do CoffeeScript, a nie Ruby.) Ciesz się kawą osadzoną w rubinach.

 4
Author: David Beckwith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-05 14:48:37

Należy trzymać się potoku zasobów, jeśli jest to możliwe w Rails 4 , zamiast używać widoku js.erb.

Przekazywanie zmiennych do Js za pomocą gon lub innej techniki omówionej na stronie: Ruby on Rails-wysyłanie zmiennej JavaScript z kontrolera do zewnętrznego pliku zasobu Javascript

Z gon:

App / views / layouts / application.html.erb:

<head>
  <meta charset="utf-8"/>
  <%= include_gon %>

App / controllers / application_controller.rb:

before_filter do
  gon.latitude = 0.1
  gon.longitude = 0.2
end

App / assets/javascripts / locations.js.kawa:

myLatlng: new google.maps.LatLng(gon.latitude, gon.longitude)

Ta metoda jest szybsza, ponieważ plik jest wstępnie skompilowany tylko raz przy starcie, jest obsługiwany przez serwer zamiast przez Rails i na tym samym żądaniu HTTP, co reszta Js.

 4
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:02

Zgadzam się z Ciro Centellim, by zostawić rurociąg aktywów w spokoju, zwłaszcza jeśli używasz Heroku. Bez wątpienia {[2] } jest przydatny, jeśli potrzebujesz wielu zadań, ale możesz to zrobić również bez klejnotu. W swoim html include

<%= javascript_tag do %>
    window.latitude = <%[email protected] %>
    window.longitdue = <%= @location.longitude %>
<% end %>

And in your coffee file

myLatlng: new google.maps.LatLng(window.latitude, window.longitude)

Często można obejść inne potrzeby w podobny sposób. Na przykład, jeśli nie chcesz, aby skrypt coffee uruchamiał się na elemencie o określonym identyfikatorze, to w html użyj erb, aby dodać ten identyfikator tylko wtedy, gdy chcesz zadziałało.

 1
Author: Obromios,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-15 16:36:37