可以Rails的javascript_include_tag忽略以前加载的脚本吗?

我正在使用这一行:

= javascript_include_tag :all, :recursive => true, :cache => true 

在Rails应用程序的页脚中执行以下操作:

  • 以递归方式加载public / javascripts下的所有脚本
  • 在生产中,将它们全部归为一个文件( :cache部分)

但是,我想在头部加载其中一个脚本,因为一些内联JS依赖于它。

是否有javascript_include_tag选项可以排除已加载的文件?

我知道它默认情况下不会这样做,因为现在我看到源HTML中引用了两次的脚本。

javascript_include_tag是一个简单的html帮助器,不跟踪天气或者没有已经包含在页面上的东西,所以不,没有选项,很糟糕。

取而代之的是,您可以通过以下几种方式解决问题:

  1. 使用像Jammit这样的东西 ,我现在使用它并且是一种绝对的快乐。 它将生产中的所有javascripts打包到一个文件中,允许你压缩它们中的shit,并为CSS做同样的事情。 您可以在配置目录中使用.yml文件对其进行配置,使其可移植且易于递归地包含目录中的脚本,同时仍然控制它们在页面中包含的顺序或附加到包中。 Jammit的另一种(不那么棒的恕我直言)是Asset Packager 。

  2. 在头部使用javascript_include_tag 。 不是真正的世界末日。 稍后优化。

  3. 不是特定的Rails,而是使用head.js。 head.js非常新,但允许您快速并行地加载许多脚本,同时保留执行顺序并在脚本加载之后但在dom准备好之前触发回调。 它包含一些其他好东西,比如旧浏览器中的HTML5友好性。 此选项很有趣,因为您将脚本保持独立,或者至少在不同的包中保持最大的并行下载速度。 我不确定天气或者不是在连续下载一个巨大的压缩包,甚至是在页脚右侧,或者使用head.js并行加载东西会更快,但它确实使管理这些事情变得更容易。

我最近使用了head.js和Jammit,我必须说,对于繁重的Javascript应用程序,它们使事情变得非常简单。

config/application.rb您可以在javascript_include_tag设置:defaults的含义:

 # JavaScript files you want as :defaults (application.js is always included). config.action_view.javascript_expansions[:defaults] = %w(rails, jquery) 

然后,您可以使用:defaults参数在application.erb.html或您喜欢的任何地方使用该标记:

 <%= javascript_include_tag :defaults %> 

在视图模板的底部完成此操作后,您当然可以在其之前包含单个脚本。

现在,我意识到你想使用:all参数,并递归加载,但是这个解决方案确实为你提供了更多的控制,我认为你将需要它。