Ruby on rails 如何根据控制器/操作加载Javascript资产?

Ruby on rails 如何根据控制器/操作加载Javascript资产?,ruby-on-rails,Ruby On Rails,这是默认的application.js: //= require jquery //= require jquery_ujs //= require_tree . CoffeeScript模板包含以下内容: # Place all the behaviors and hooks related to the matching controller here. # All this logic will automatically be available in application.js.

这是默认的
application.js

//= require jquery
//= require jquery_ujs
//= require_tree .
CoffeeScript模板包含以下内容:

# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
对我来说,“与此处匹配的控制器相关”“意味着只有在使用
foo\u bar
控制器时才应加载
foo\u bar.js.coffee
。我说得对吗


问题是,它加载所有Javascript文件,即使它们不需要。也。。。我想知道如何根据控制器的操作有条件地包含Javascript文件。

应用程序中的
require_tree
指令。js加载在资产树中找到的所有js和coffee文件。如果删除它,它将只加载指定的文件

对我来说,“与此处匹配的控制器相关”意味着只有在使用foo_bar控制器时才应加载foo_bar.js.coffee。我说得对吗

否,按照“require”指令的指定加载文件

还有。。。我想知道如何根据控制器的动作有条件地包含Javascript文件

为每个控制器创建一个
foo_bar.js
文件,根据需要在每个控制器中创建其他文件,并有条件地将它们包含在布局中

# some_layout.erb
<%= javascript_include_tag params[:controller] %>
<%= javascript_include_tag "application", "#@controller.#@action" %>
#some_layout.erb

有几种方法可以做到这一点,我发现最简单、最优雅的方法是:

移除

//= require_tree .
指令,并将模板更改为

<%= javascript_include_tag "application", controller_name %>
我建议的解决方案。有一件事你可以考虑,就是把它分解成Apple。
before_filter :your_function

def your_function
  @controller = controller_name
  @action = action_name
end
然后像这样在布局中使用它

# some_layout.erb
<%= javascript_include_tag params[:controller] %>
<%= javascript_include_tag "application", "#@controller.#@action" %>

Cool,这就是生成骨架的方式。行动呢?我是说。。。我只想加载一个特定动作的JavaScript。。。也可以用简单的方法来做吗?