如果你做得正确的话,资产管道会非常强大:
舱单
的目的//= require tree .
是创建一个“清单”文件,Rails 将使用该文件来呈现您调用的文件。如果您不“预编译”您的资产,这意味着每次您的浏览器加载您的应用程序时,它都会查找清单中包含的文件并加载它们
这意味着您可以定义在清单中调用的内容和不调用的内容。我们更喜欢在清单中调用任何基于 gem 的资产,但也指定特定的文件夹,如下所示:
//
//= require jquery
//= require jquery_ujs
//= require jquery.ui.draggable
//= require_tree ./jquery
//= require_tree ./extra
//= require turbolinks
我们使用此设置来调用所有 JQuery 插件和任何额外的 JS,以及特定于 gem 的文件
预编译
如果您预编译资产,它基本上会构建不同的文件,这些文件在您加载浏览器时一致加载。如果您使用 Heroku 或 CDN,您可能希望预编译您的资产,以减少延迟和依赖性
应用设计
要回答你的问题,你当然可以加载特定于控制器的 JS。我们这样做:
#app/views/layouts/application.html.erb
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
<%= stylesheet_link_tag controller_name, media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag controller_name, "data-turbolinks-track" => true %>
然后,您可以使用 Phoet 所描述的内容来确保您的 JS 文件被分割:
#config/environments/production.rb
# Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
config.assets.precompile += %w(mycontroller.js)
那么对于application.js,你只能调用你想要在整个应用程序中持久保存的文件:
#app/assets/javascripts/application.js
//
//= require jquery
//= require jquery_ujs
//= require jquery.ui.draggable
//= require_tree ./jquery
//= require_tree ./extra
//= require turbolinks