您不應該加載您的JS或CSS文件以外的資產管道,因爲你洛杉磯發掘使Rails如此卓越的重要特性。你不需要另一個寶石。我相信儘可能少使用寶石,在這裏使用寶石不是必要的。
你想要什麼被稱爲「特定於控制器的Javascript」(「Action Specific Javascript is included at the bottom)」這允許你爲特定的控制器加載一個特定的JavaScript文件試圖將你的Javascript連接到一個View是有點......後退,並沒有遵循MVC設計模式,你想將它與你的控制器或你的控制器內的動作聯繫起來
不幸的是,無論出於何種原因,Rails開發者決定,默認情況下,加載位於資產目錄中的每個JS文件爲什麼他們決定這樣做,而不是默認啓用「Controller Specific Javascript」,我永遠不會知道,這是通過application.js文件完成的,默認情況下,該文件包含以下代碼行:
//= require_tree .
這就是所謂的指令。這是什麼鏈輪用來加載assets/javascripts目錄中的每個JS文件。默認情況下,鏈輪自動加載application.js和application.css,require_tree指令將每個JS和Coffee文件加載到它們各自的目錄中。
注:當你的支撐架(如果你不是腳手架,現在正是入手的好時機),那麼Rails會自動生成一個咖啡文件爲你,爲的是支架的控制器。如果你想讓它產生標準JS文件,而不是一個咖啡文件,然後刪除默認啓用在的Gemfile,你的腳手架反而會創造JS文件咖啡寶石。
好,所以第一步以實現「控制器特別的Javascript」是從你的application.js文件中刪除require_tree代碼或資產/ JavaScript的目錄內將其更改爲一個文件夾,如果你仍然需要全球JS文件。即:
//= require_tree ./global
第2步:走進你的config /初始化/ assets.rb文件,並添加以下內容:
%w(controllerone controllertwo controllerthree).each do |controller|
Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"]
end
插入所需的控制器的名字。
第3步:在application.html.erb文件,該更換javascript_include_tag(注意PARAMS [:控制器]部分:
<%= javascript_include_tag 'application', params[:controller], 'data-turbolinks-track': 'reload' %>
重新啓動服務器和中提琴,這是JS文件!與支架現在僅當控制器被稱爲負載產生。
需要加載一個具體行動的特定JS文件在你的控制器,IE /用品/新?難道這不是:
application.html.erb:
<%= javascript_include_tag "#{controller_name}/#{action_name}" if AppName::Application.assets.find_asset("#{controller_name}/#{action_name}") %>
配置/初始化/ assets.rb:
config.assets.precompile += %w(*/*)
然後添加一個新的文件夾具有相同的名稱,你控制器您的assets/javascripts文件夾,並將您的js文件與您的動作放在同一個名稱中。然後它會將其加載到該特定操作上。
可能使用[使用Rails 3.1,你把你的「頁面特定」JavaScript代碼?)重複(http://stackoverflow.com/questions/6167805/using-rails-3-1-where-do-you -put-your-page-specific-javascript-code) – 2013-01-11 01:24:13
對於那些想要完全理解它如何工作以及哪些是最好的請閱讀http://railsapps.github.io/rails-javascript-include-external.html 。這是迄今爲止我在這個主題上看到的最好的文檔。這不僅是對Rails的一個很好的閱讀,也是對web開發人員的一個很好的閱讀。這就是爲什麼最好以軌道方式做事情的原因。我肯定會爲未來的問題使用Unholy Rails。哇。 – DutGRIFF 2014-01-22 22:22:08
@KateGregory,一個更新。 – 2014-07-14 09:39:19