2012-10-17 50 views
3

使用Rails 3+和資產管道我的理解是,在所有資產/ JavaScript的JavaScript文件都會自動包括在內,如果指定編譯成一個js文件Rails的控制器方面的最佳實踐/查看特定的JavaScript

require_tree . 
application.js中的

關於處理特定於控制器/視圖的javascript的最佳實踐是什麼?例如,假設我有一個控制器/視圖「房屋」,我要驗證的房屋形式使用jQuery形式驗證插件,這樣做,我已經放置在下面的代碼在我houses.js文件

$(document).ready(function(){ 
    $("#new_house_form").validate(); 
}); 

其是好的,但問題是,當我訪問另一個頁面(說/所有者)時,它會嘗試驗證房屋形式,並在javascript控制檯中收到錯誤消息。當然,我可以檢查表單是否存在於當前頁面上,然後調用驗證程序,但是對於我來說似乎有點不清楚,尤其是在.ready中有很多控制器特定的代碼。

我的解決方案來解決這個已經創建一個文件夾資產/ Java腳本/全局和application.js中

require_tree ./global //instead of require_tree . 

,並將所有其他js文件,除了在它houses.js。然後我手動包含houses.js,無論用戶訪問/房屋/新房還是/房屋/編輯

這種做法是否可以接受?如果不是什麼被認爲是處理這些情況的最佳做法?

+0

的最佳解決方案:http://stackoverflow.com/questions/7312465/how-to-display-controller-specific-javascript-in-rails-3-1 – agmin

回答

0

通常我只是讓所有的js被加載並在調用任何方法之前檢查該元素是否存在。

$(document).ready(function(){ 
    if($("#new_house_form").length > 0){ 
    $("#new_house_form").validate(); 
    } 
}); 
這裏
+0

這樣做的問題是,如果你在你的javascript中有很多控制器/視圖特定的代碼(不只是表單),那麼你正在做很多這種錯誤檢查。在這裏和那裏進行奇怪的驗證都很好,但隨着JavaScript的增長,它會變得非常難看。我希望有一個更清晰的方式來處理這個問題,而不是手動錯誤檢查或我在問題中描述的方法。 –

+0

是的,的確,使用這種方法,您的javascript中會有很多錯誤檢查。這是您解決問題的快速解決方案。如果你想要一個更清潔的解決方案,請檢查@agmin在其評論中發佈的鏈接。看起來像一個不錯的解決方案。 –