2017-08-11 87 views
1

我有一個單獨的控制器,有2個動作/視圖和一個通道,所有這些都被腳手架搭建,幾乎都使用默認項目。如何將JavaScript添加到Rails 5中的單個視圖?

當我加載任一視圖,我可以看到該渠道訂閱正確。

我需要訂閱只發生在其中一個視圖上。目前,資產管道似乎將所有內容編譯成單個js文件,然後將該js文件提供給每個頁面。

當我腳手架我的頻道時,它創建了一些名爲channel.js的javascript。我如何僅包含特定操作/視圖的channel.js?

+1

[資產管道:使用JavaScript文件只有一個控制器]的可能的複製(https://stackoverflow.com/questions/19899542/asset-pipeline - 使用JavaScript的檔案換僅一控制器) – Gerry

回答

0

資產管道確實將所有內容編譯成單個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 
} 
0

嘗試進入您的控制器保存方法你想擁有的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}' %> 
相關問題