在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.js
和sessions.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可以帮你解决这个问题。 RailsScript是一个简单的方法,它调用以当前控制器命名的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!')
由于RailsScript也与Turoblinks兼容,因此您的用户只需加载一次JS和CSS资产! 不在每一页上。