任何知道Rails資產管道的人都知道,默認行爲是將包含在清單中的所有JavaScript文件都捲入一個大的,笨拙的,不幸的球。Rails頁面特定的JavaScript:最佳實踐是什麼?
ALL THE JAVASCRIPT -> application.js
這意味着,如果你有一個JavaScript文件foo.js下,會激活不僅由控制器FOO達到的網頁,同時也爲所有其他網頁。
這很容易解決,但我不知道什麼是最好的方法來做到這一點。
我最初有application.html.erb使用JavaScript標記在我的應用程序中將當前控制器和動作傳遞給JavaScript。
<%= javascript_tag do %>
window.givenController = "<%= controller_name %>";
window.givenAction = "<%= action_name %>";
<% end %>
在我的js文件,然後,我會圍繞命名文件控制網頁的特定代碼與這種if語句,以確保它們只運行在這些頁面。
if(givenController == "foo" && givenAction == "bar"){
doStuff();
}
我的老闆認爲,這造成不必要的變量和建議,而不是我用if語句指向網頁上的特定JQ元素:
if($("#some-element-in-foo").length > 0){
doStuff();
}
,而我顯然有望跟隨我的老闆的方向,我對我在未來的應用程序中如何處理這個問題存在爭議。我認爲我的方法比表達方式更具表現力和靈活性,但我可能會錯過一些關鍵缺陷。
您是如何看待這兩種做法,無論是由他們自己還是彼此之間的關係,爲什麼?什麼可能是解決同樣問題的一些更好的方法?
另一種選擇是使用數據屬性而不是類。我認爲將數據控制器和數據操作添加到body標籤而不是類會更簡單。 – elevine
另外一個不錯的選擇@elevine。我通常在控制器目標css聲明的body標籤上也有這些類,所以在我的情況下它會殺死兩隻鳥。 –