Asset Pipeline和Rails 3.1 JS库特定于一个控制器中只有一个页面

时间:2012-01-01 07:28:15

标签: ruby-on-rails-3.1 asset-pipeline

我认为文档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的目标冲突?

2 个答案:

答案 0 :(得分:0)

确实存在冲突 - 你应该选择一种方法(require_tree)或另一种方法(加载每个控制器文件)。

第一个是最优的,使用css类定位特定于页面的js很简单。

您不想这样做的唯一时间是管理员部分(您使用第二个清单)或其他专业功能,例如仅在特定页面上的灯箱库(因此您不希望这样)网站上到处都有额外的js和css。)

答案 1 :(得分:0)

在我看来,你不应该依赖application.js脚手架。 application.js需要整棵树,但这样做是为了让项目开始变得容易,但这并不意味着它应该保持这种状态。

您可能会创建不同的"捆绑"一些文件,其中一些将只包含在特定的页面中 例如,我的application.js只需要librairies和应用程序文件夹中的每个文件。这样你仍然可以使用页面特定的js。

如果你有一些特定于某个控制器的大javascript文件,我想<%= javascript_include_tag params[:controller] %>会很有用。