我有一個單獨的控制器,有2個動作/視圖和一個通道,所有這些都被腳手架搭建,幾乎都使用默認項目。如何將JavaScript添加到Rails 5中的單個視圖?
當我加載任一視圖,我可以看到該渠道訂閱正確。
我需要訂閱只發生在其中一個視圖上。目前,資產管道似乎將所有內容編譯成單個js文件,然後將該js文件提供給每個頁面。
當我腳手架我的頻道時,它創建了一些名爲channel.js的javascript。我如何僅包含特定操作/視圖的channel.js?
我有一個單獨的控制器,有2個動作/視圖和一個通道,所有這些都被腳手架搭建,幾乎都使用默認項目。如何將JavaScript添加到Rails 5中的單個視圖?
當我加載任一視圖,我可以看到該渠道訂閱正確。
我需要訂閱只發生在其中一個視圖上。目前,資產管道似乎將所有內容編譯成單個js文件,然後將該js文件提供給每個頁面。
當我腳手架我的頻道時,它創建了一些名爲channel.js的javascript。我如何僅包含特定操作/視圖的channel.js?
資產管道確實將所有內容編譯成單個JS文件,因此沒有內置的方式來限制某些JavaScript文件執行到特定操作。
但是有一種方法可以解決這個問題。首先,這個輔助方法添加到application_helper.rb
:
# application_helper.rb
def body_classes(*args)
return (@body_classes || []).join(" ") if args.empty?
@body_classes ||= []
@body_classes += args.map { |klass| klass.to_s.gsub("_", "-") }
@body_classes.uniq!
nil
end
而且在佈局中使用它:
<!-- application.html.erb -->
<body class="<%= body_classes %>">
<!-- ... -->
</body>
有了這個,你可以在你的模板指定某些體類,被添加到<body>
標籤:
<!-- your_action.html.erb -->
<%= body_classes :my_custom, :action_class %>
<h1>Your action</h1>
<!-- ... -->
上面的代碼將添加下列類來<body>
:
<body class="my-custom action-class">
最後,你可以在你的JS代碼測試這些體類:
// your_action.js
if($("body").hasClass("my-custom")) {
// run code specific to pages with the 'my-custom' class
}
嘗試進入您的控制器保存方法你想擁有的javascript中內置的觀點寫這裏面:在以下文件
def 'the view you want to effect' # This could be "index" for your index.html.erb view
@java = "channel.js"
end
然後,找到你的<%= javascript_include_tag %>
意見>佈局> application.html.erb
這包括到您的標記加載您要與以前的過程中的任何觀點不同的JavaScript文件。 (與CSS嘗試這裏面你的CSS包括標籤了。)
<%= javascript_include_tag '#{@java}' %>
[資產管道:使用JavaScript文件只有一個控制器]的可能的複製(https://stackoverflow.com/questions/19899542/asset-pipeline - 使用JavaScript的檔案換僅一控制器) – Gerry