Rails资产管道:在清单之外预编译资产?

3

我有一些特定于页面的js和css文件,要么是:

  1. 不想在开发中运行(例如跟踪代码)
  2. 不想在每个页面上运行

或两者都是。

在Rails 3.0.x中,我会像这样从需要它们的视图中调用它们:

- if some_condition
  = javascript_include_tag 'page_specific'

现在,使用资产管道,似乎我必须将这些包含在清单中(因此在应用程序的每个页面上),否则它们不会被预编译。由于我在使用Heroku进行部署,所以允许懒惰编译不是一个选项。
如何手动从资产目录预编译每个文件,而无需将它们全部包含在清单中?这可能吗?
1个回答

3
不要将特定页面的资产放在清单中,而是在需要时像在 Rails 3.0.x 中那样包含它们,这样预编译器会将这些特定于页面的内容编译为单独的文件。
个人建议只需检查该页面中已知存在的某个元素。如果找不到该元素,则不执行其他代码。
$(function(){
   if( $("#page_specific_element").length !== 1 ) return;
   //page specific functions
});

3
好的,我会接受你的答案,因为我喜欢你展示的“检查元素”的方法,但是我发现问题在于预编译器设置为忽略所有未命名为“application”的“纯” .js 和 .css 文件,如果你想要它们被预编译,你必须覆盖它或者在结尾添加处理器扩展名(.coffee 或 .scss)。 - Andrew
你需要告诉Sprockets你想要包含那些文件,最好的方法是在application.css中添加"//= require my_file"。 - royvandermeij

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接