使用javascript_include_tag和一个充满JS的子文件夹
我在/public/javascripts/test
下的文件夹中有一堆Javascripts,我想在尽可能少的行中使用javascript_include_tag
将它们包含在我的布局中。
目前我使用javascript_include_tag
有25行代码,有没有办法更好地做到这一点? 另外我不能使用javascript_include_tag :all :recursive
因为在其他目录中有一些我不想包含的JS文件。
谢谢您的帮助。
更新:所以现在我有一个javascript.rb初始化程序,它具有这一行代码(非常长):
ActionView::Helpers::AssetTagHelper.register_javascript_expansion :syntax_highlight => Dir["#{Rails.root.to_s}/public/javascripts/sh/*.js"].each {|js| js.gsub!("#{Rails.root.to_s}/public/javascripts/",'')}
现在在我的布局中,我有以下内容:
现在当我渲染页面时,我得到以下内容:
但由于某种原因,这一切都无效吗? 是什么赋予了?
可能还有更好的解决方案,但这仍然可以解决问题:
Dir["#{Rails.root.to_s}/public/javascripts/test/*.js"].each {|js_file| javascript_include_tag js_file }
试试这个
在config / application.rb中
取消注释这一行
config.action_view.javascript_expansions[:defaults] = %w(javascript1.js javascript2.js)
并添加文件的名称,如javascrip1.js和javascrip2t.js等。
然后在视图/布局中添加此行
<%= javascript_include_tag :defaults %>
Vlad Khomich的回答也很棒,也会奏效。
考虑到你包含了很多js文件,我假设你想要在公共目录下包含所有js文件。 如果是这种情况,您可以更改javascript_include_tag ,如下所示,它将帮助您将整个文件作为生产文件提供,从而节省大量请求:
javascript_include_tag :all, :recursive => true, :cache => true
如果您想单独处理测试文件,可以使用register_javascript_expansion ,例如:defaults
,还可以使用Vlad Khomich的答案中的代码。
# config/init/javascript.rb ActionView::Helpers::AssetTagHelper.register_javascript_expansion :tests => [array_of_js_paths_from_previous_answer] # application.html.erb <%= javascript_include_tag :tests, :cache => :tests %>