在rails中为每个控制器加载Javascript

Rails中每个视图的JavaScript文件

我调查了类似的线程,但我无法捕捉到。 下面是我的application.js文件。

//= require jquery //= require jquery_ujs //= require bootstrap //= require vendor //= require_tree . 

我有一个资产管道的目录结构,如下所示。

 --javascripts -misc // directory helper.js session.js app.js application.js home.js 

我如何为所有页面加载misc目录,为HomeController加载home.js,为SessionController加载session.js。 我不想让不需要的JS在每个地方加载。

正如Dave所指出的那样,您可以将建议的解决方案用于他的链接问题,即通过以下方式:

 <%= javascript_include_tag params[:controller] %> 

你必须要记住的唯一事情就是将你的javascript资源命名为控制器的名称 – 所以你的home.jssessions.js就是这样(如果我记得正确的Rails的命名约定)。

我已经看到了这样做的其他方法,如果你想在与不同控制器关联的页面上包含一些javascript,无论出于何种原因,这都很有用。 我认为, 这个答案提供了一个非常优雅的解决方案。

首先,将全局javascripts添加到清单文件中,并将其包含在application.html.erb布局文件中。

   # stuff <%= javascript_include_tag 'application' %> <%= yield :javascripts %>   <%= yield :content %>   

然后在您将加载特定javascripts的视图中添加以下内容:

 <% content_for :javascripts %> <%= javascript_include_tag 'your_script' %> <% end %> 

上述解决方案的问题是它需要为每个控制器提供不同的JS文件的额外请求。 更好的解决方案是组织所有JS,以便可以使用资产管道将其编译为单个文件,然后根据当前控制器和操作进行调用。

有一些gem可以帮你解决这个问题。 RailsS​​cript是一个简单的方法,它调用以当前控制器命名的JS对象,然后调用该对象中的方法,该方法以当前操作命名。 这使得为​​rails编写和维护特定于页面的JavaScript非常容易。

https://github.com/gemgento/rails_script

 # app/assets/javascripts/users.js.coffee window.App ||= {} class App.Users extends App.Base show: -> alert('The users#show action!') 

由于RailsS​​cript也与Turoblinks兼容,因此您的用户只需加载一次JS和CSS资产! 不在每一页上。