我可以在render.js上执行的视图中使用CoffeeScript吗?

Geo*_*Geo 12 ruby ruby-on-rails coffeescript

我需要做什么才能在Rails JS视图中使用CoffeeScript?例如:

def index
    format.js { render :layout => false } 
end
Run Code Online (Sandbox Code Playgroud)

为了让Rails使用,我需要做index.js.coffee什么?

Tre*_*ham 15

约翰尼的回答是正确的.如果你查看从CoffeeBeans页面链接到的pull请求,你就会说

一旦我们有一个快速,干净的实现,它的核心是受欢迎的.但是,3.2更可能是目标.

我在Railsconf上简要地与Sam Stephenson和Josh Peek讨论了这个问题,因为这是人们在我的CoffeeScript谈话之后问过我的一个缺失的功能.毕竟,Rails 3.1正在推动CoffeeScript作为默认设置; 有些地方需要使用纯JS,这似乎很奇怪.Sam的反应是,这不会有效,因为你必须在每个页面请求上启动CoffeeScript编译器,即使在生产中也是如此.这是因为代码就像

<%= coffee_script_tag do %>
  alert "coffee script is #{verb}!"
<% end %>
Run Code Online (Sandbox Code Playgroud)

创建一个ERB插值(不是CoffeeScript插值 - 不幸,两者都使用相同的语法),可能会在每个请求上产生不同的CoffeeScript代码字符串.并且从coffee_script_tag实现中无法判断每次给定代码是否相同(即是否存在ERB插值).

现在,CoffeeScript编译器非常快,但是编译为JavaScript仍然会为每个请求增加一些额外的时间.所以Rails团队对于鼓励这种做法犹豫不决.

为了提高效率,并避免ERB插值和CoffeeScript插值之间的模糊,您应该将CoffeeScript保存在某处(可能作为.coffee与视图位于同一目录中的文件)并手动将其编译为JavaScript.


Dav*_*vid 13

它尚未在3.1中得到支持.您将需要使用Coffeebeans.


更新:现在支持rails 3.2

  • 你在开玩笑吧! (6认同)

Sna*_*hot 10

这现在在Rails 3.2中工作.例如,我有一个名为book的资源.此资源在app/views/books/index.html.erb中有一个文件,其中包含以下内容:

<%= link_to 'test me', new_book_path(color: 'blue'), remote: true %>
Run Code Online (Sandbox Code Playgroud)

然后我在app/views/books/new.js.coffee有一个文件,≈以下代码:

test = ->
  'this is a test'

console.log test()
console.log( "<%= params[:color] %>" )
Run Code Online (Sandbox Code Playgroud)

我知道了:

'this is a test'
'blue'
Run Code Online (Sandbox Code Playgroud)

在我的浏览器控制台中

  • 你有没有把它用于生产?视图上的.coffee扩展在开发模式下工作,但在生产模式下失败.我正在使用Rails 3.2.3 (2认同)