den*_*min 28 ruby-on-rails erb coffeescript
我想在我的.coffee
文件中使用一些erb,如下例所示
myLatlng: new google.maps.LatLng(<%=@location.latitude %>, <%=@location.longitude %>)
Run Code Online (Sandbox Code Playgroud)
我改名locations.js.coffee
为locations.erb.coffee
但我仍然得到以下错误
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
Run Code Online (Sandbox Code Playgroud)
Arc*_*lye 76
如果你想在.coffee
文件IN YOUR VIEW文件夹中使用erb ,请将文件命名为yourfilename.js.coffee
,并且Rails仍然会处理ERB,奇怪的是.
要使它在Heroku中运行,请将咖啡轨移出Gemfile中的资产组.
在 Rails 4 中尽可能坚持使用资产管道,而不是使用js.erb
视图。
使用 gon 或其他一些技术将变量传递给 Js:Ruby on Rails - 将 JavaScript 变量从控制器发送到外部 Javascript 资产文件
与gon
:
应用程序/视图/布局/application.html.erb:
<head>
<meta charset="utf-8"/>
<%= include_gon %>
Run Code Online (Sandbox Code Playgroud)
应用程序/控制器/application_controller.rb:
before_filter do
gon.latitude = 0.1
gon.longitude = 0.2
end
Run Code Online (Sandbox Code Playgroud)
应用程序/资产/javascripts/locations.js.coffee:
myLatlng: new google.maps.LatLng(gon.latitude, gon.longitude)
Run Code Online (Sandbox Code Playgroud)
这种方法更快,因为文件在启动时只预编译一次,由服务器而不是通过 Rails 提供服务,并且与 Js 的其余部分相同的 HTTP 请求。
归档时间: |
|
查看次数: |
23527 次 |
最近记录: |