2012-11-28 36 views
3

我的Rails javascripts目錄中有幾個javascript(咖啡腳本)文件。代碼在邏輯上分爲不同的文件。但是,每個文件都以$(document).ready ->開頭,一些文件共享通用幫助程序功能。在Rails應用程序中整理JavaScript

什麼是分解出輔助功能的最佳方法?我是否應該將它們全部放在之前包含在application.js中的其他文件中?

而且,是很正常的劃分代碼礦的方法是,在每一個頁面呢$(document).ready ->?這是不是說我的所有代碼都是在每一頁上調用的,不管它是否相關?這個組織有沒有其他的選擇?

我不知道,如果這個問題是特定於Rails的或相關的JavaScript和jQuery一般。

回答

2

我認爲這是一個Rails問題,並且是一個很好的問題。

Rails中的常規範例,其中「全局」內容在application.*中與資產管道有點混亂,因爲application.js實際上充當清單而不是普通文件。當然,你可以在那裏添加東西,甚至爲你的通用代碼創建一個application.js.coffee。我決定創建一個名爲common.js.coffee(在另一種情況下爲shared.js.coffee)的文件,在我的情況下,該文件由require_tree .指令自動處理。

(更新基於來自@ jonathan-tran的評論)在某些情況下,您可能只希望在文檔上調用所有頁面的方法 - 例如,我使用它在任何視圖中爲任何字段提供日期選擇器。如果您希望方法(實際上是全局函數)可用於調用,則需要將coffeescript函數導出爲變量,例如通過附加到window對象。您可以在共享文件中執行這兩個操作。

確實,如果您使用生成器,那麼每個控制器都會生成文件,如果在編譯資產時沒有特定代碼導致一系列冗餘$(document).ready ->語句。所以只是擺脫你不使用的那些。但是,按照特定於頁面的功能分離模式對我來說很有意義並且運行良好 - 我知道在哪裏尋找東西,並且隨着項目的增長,這些值得花費很多。

而另一條規則我已經使用Rails獲悉:順其自然。如果Rails是這樣做的話,那可能是一個好方法。他們的確在考慮這些事情。不要修復什麼作品:-)

+0

出於某種原因,我遇到的問題得到公共文件的工作。依賴於它的文件無法看到常用功能。我在清單中依賴它的文件上方有公用文件。 // = require_tree。在底部。有任何想法嗎? 所以我有: // =需要共同 // =需要依賴 // = require_tree。 – mushroom

+2

這是因爲CoffeeScript編譯器在函數中封裝了每個完整文件,以便變量不會泄漏。如果你想要一個函數或變量是全局可訪問的,你需要明確地導出它。在瀏覽器中最簡單的方法是'window.foo = blah'。請參閱[此問題](http://stackoverflow.com/questions/5211638/pattern-for-coffeescript-modules)以獲取更多信息。 –

+0

@JonathanTran是的,這是問題所在。謝謝。 – mushroom