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
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.
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ą:)
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.
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.
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.
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