咖啡脚本中的erb与rails 3.1

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.coffeelocations.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中的资产组.

  • 我在3.2.12和.js.coffee.erb文件不起作用.我必须重命名它们.js.coffee他们工作 - 即使他们有erb.去搞清楚. (5认同)
  • 刚刚在Rails 3.2.6中尝试过它并没有用.不得不将`locations.js.coffee`重命名为`locations.js.coffee.erb` (4认同)

Clé*_*ent 13

您可能需要将文件重命名为locations.coffee.erb,以便在咖啡之前处理erb :)


Cir*_*四事件 5

在 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 请求。