轨道管道
这不是 Rails 管道,不引人注目的 JS https://en.wikipedia.org/wiki/Unobtrusive_JavaScript是一个标准的编程模式。
将 JS 从页面(“内联”)提取到外部文件会清理页面,仅此而已。
如果你想让页面快速加载,你需要将 JS 拆分成单独的文件。这可以采用类的形式,但主要用于特定于页面的功能。例如,您可能有admin.js
and application.js
.
Rails
具体就 Rails 而言,处理不显眼的 JS 的方法取决于您如何precompile
你的资产。标准方法是放置all将功能转化为application.js
- 这显然会变得臃肿。
解决这个问题的方法是利用config.assets.precompile http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assetshook - 允许您指定要包含为单独预编译元素的文件:
# config/application.rb
config.assets.precompile << %w(admin.js cart.js etc.js)
这将改变为处理者manifest.js http://eileencodes.com/posts/the-sprockets-4-manifest/ in Sprockets 4+
(如果需要,我可以在更新中对此进行解释)。我制造了一个commit https://github.com/rails/sprockets/pull/427到他们的仓库了解它。
这意味着当您预编译资产时(或者当您在开发中运行它们时——它们被缓存),您会得到admin.js
或您定义为单独预编译的任何内容。这本身并没有什么意义。这些文件只会出现在public/assets
.
What it does意思是你可以引用你的文件layout:
# app/views/layouts/application.html.erb
<%= javascript_include_tag :application, (:admin if [[condition]]) %>
or
# app/views/layouts/admin.html.erb
<%= javascript_include_tag :admin %>
因此,您将能够在需要时调用所需的文件。
我可以更深入地讨论,但这应该回答眼前的问题。