我不想使用//= require_tree .
(因爲它加載了我擁有的所有資產,我也不需要),並且不希望每次都寫入javasctipt_include_tag("my_controller")
。所以,我決定做以下幾點:這是一個很好的DRY方法嗎?
module ApplicationHelper
def add_asset(*files)
puts "DEBUG: add: " + files.to_s
content_for(:html_head) do
if GtFe::Application.assets.find_asset(*files)
yield :asset_include_tag
end
end
end
def javascript(*files)
add_asset(*files) do
content_for :asset_include_tag
javascript_include_tag(*files)
end
end
def stylesheet(*files)
add_asset(*files) do
content_for :asset_include_tag
stylesheet_link_tag(*files)
end
end
end
所以我使用的helper方法的名稱命名的產量和我有一個主add_asset()
方法和兩個特定資產的方法。這是否是一個好方法?還是有更好的解決方案?
更新:
從軌道文檔:
例如,如果您生成一個ProjectsController,導軌也會增加 的app /資產/ Java腳本/ projects.js.coffee一個新的文件另一個是 app/assets/stylesheets/projects.css.scss。默認情況下,這些文件將立即使用require_tree 指令由您的應用程序使用 。有關 require_tree的更多詳細信息,請參閱清單文件和指令。
您也可以選擇成包括控制器特定樣式表和 JavaScript文件僅在使用 下列各自的控制器:<%= javascript_include_tag PARAMS [:控制器]%>或<%= stylesheet_link_tag PARAMS [:控制器]% >。儘管使用require_tree指令確保您不是 ,因爲這會導致您的 資產被多次包含。
所以javascript_include_tag
和stylesheet_link_tag
是合理的。但是,這樣做是否好,讓這個工作人員幹掉?
UPDATE2:
我登陸這個代碼的改進:
module ApplicationHelper
def add_asset(asset_type, *files)
puts "DEBUG: add #{asset_type} files: #{files}"
content_for(:html_head) do
files.each do |file|
puts "DEBUG: now add #{asset_type}: #{file}"
if GtFe::Application.assets.find_asset(file)
yield(:asset_include_tag, file)
end
end
end
end
def javascript(*files)
add_asset("js", *files) do
content_for :asset_include_tag
javascript_include_tag
end
end
def stylesheet(*files)
add_asset("css", *files) do
content_for :asset_include_tag
stylesheet_link_tag
end
end
end
,然後我可以在每個視圖/佈局這麼寫的:
= javascript(params[:controller], "#{params[:controller]}_#{params[:action]}")
在控制器特定的CSS? – static
是的,在所有js和css文件中,您都可以執行此操作。 –