在创建新控制器和关联视图后,Rails 会生成一些特定于视图的空资源。执行以下命令:
rails generate controller home index
这将生成home.css.scss
和home.js.coffee
。作为 Rails 的新手,我最初的想法是这些将被自动配置为仅在各自的视图中呈现。事实证明,情况并非如此。相反,默认设置是在所有视图中呈现所有脚本。这是预期的吗?使这些资产特定于视图的最佳方法是什么?
在创建新控制器和关联视图后,Rails 会生成一些特定于视图的空资源。执行以下命令:
rails generate controller home index
这将生成home.css.scss
和home.js.coffee
。作为 Rails 的新手,我最初的想法是这些将被自动配置为仅在各自的视图中呈现。事实证明,情况并非如此。相反,默认设置是在所有视图中呈现所有脚本。这是预期的吗?使这些资产特定于视图的最佳方法是什么?
基本设置是(在生产中)提供单个 js 文件(和单个 CSS 文件)。从缓存的角度来看,这通常更有效,但可能会导致首页加载速度稍慢。
当这太多时,您可以创建其他清单文件(application.js 是默认文件)并单独加载它们。例如,我使用的其中一个应用程序有一个单独的 admin.js/css,因为它与面向消费者的部分几乎没有重叠。理论上,您可以将每个 js/CSS 文件视为清单文件,尽管您需要在每个页面上调用 javascript_include_tag。
如果您的问题的根本原因是您只想在某些页面上附加行为,那么要么使您的选择器/js 足够具体,以便它们可以容忍在所有页面上加载,或者(我通常这样做)添加一个控制器或身体上的动作特定类并使用它。