我认为文档http://guides.rubyonrails.org/asset_pipeline.html需要一些澄清。他们说:
例如,如果生成了ProjectsController,则会有一个新的 在app / assets / javascripts / projects.js.coffee和另一个文件处 应用程序/资产/样式表/ projects.css.scss。你应该放任何 对于各自资产内的控制器唯一的JavaScript或CSS 文件,因为这些文件可以只为这些控制器加载 使用<%= javascript_include_tag params [:controller]%>等行; 或<%= stylesheet_link_tag params [:controller]%>。
据我了解,在生产模式中,所有JS都打包成一个优化文件,最好是。我猜这个优化文件的缓存比让页面专门加载不同的JS文件集更好。
也许javascript_include_tag的意思是将某些特定的javascript运行到该页面。但是,application.js的默认值是包括树,其中包括生成的文件。所以我猜测必须调整为不包含任何控制器特定的javascript。
这里的答案Using Rails 3.1, where do you put your "page specific" javascript code?似乎表明处理问题的合理方法是将JS功能与div相关联,当JQuery没有在页面上看到div时,不会执行任何操作。
那么最佳做法是什么?我对控制器特定div的理解是否正确?在application.js中包含树的默认值是否与控制器特定的js的目标冲突?
答案 0 :(得分:0)
确实存在冲突 - 你应该选择一种方法(require_tree)或另一种方法(加载每个控制器文件)。
第一个是最优的,使用css类定位特定于页面的js很简单。
您不想这样做的唯一时间是管理员部分(您使用第二个清单)或其他专业功能,例如仅在特定页面上的灯箱库(因此您不希望这样)网站上到处都有额外的js和css。)
答案 1 :(得分:0)
在我看来,你不应该依赖application.js脚手架。 application.js
需要整棵树,但这样做是为了让项目开始变得容易,但这并不意味着它应该保持这种状态。
您可能会创建不同的"捆绑"一些文件,其中一些将只包含在特定的页面中 例如,我的application.js只需要librairies和应用程序文件夹中的每个文件。这样你仍然可以使用页面特定的js。
如果你有一些特定于某个控制器的大javascript文件,我想<%= javascript_include_tag params[:controller] %>
会很有用。