Rails 3(準確的說是.1)給了我們asset pipleline。資產管道像您看到的那樣使用application.js和application.css。
資產管道的功能是將所有不同的JavaScript文件放在那裏,並將它們打包成一個大文件(通常爲application.js)。
這裏的想法是,您可以像每個控制器一樣爲每個控制器編寫一個javascript文件,資產管道稍後將所有內容拉到一起並將其作爲一個大文件提供。這對性能有好處,對開發人員有好處。 (小容納文件更容易推理和維護)。
資產管道還增加了一些約定:javascripts生活在app/assets/javascripts
(以及我認爲的其他一些定義的位置),每個控制器一個文件通常(但你可以有多個!),而這個javascript實際上可以是機器由一些輸出Javascript的語言生成。 (Coffeescript是這種語言的一個例子 - Coffeescript不是Javascript,但Coffeescript編譯器輸出Javascript)。
資產管道將結構帶入Rails應用程序。通常情況下,如果我在一個項目中,我會讓javascript生活在以下三個地方之一:app/assets/javascript
用於我自己的應用程序代碼,lib/assets/javascript
用於我可能在不同項目中共享的一些常用實用程序,以及vendor/assets/javascript
用於諸如jQuery或Javascript庫不是我的開源社區。
上一頁,使用Rails 2,您所有的Javascript都住在public/javascripts/
中。我的意思是一切:可能包含自己的邏輯的JavaScript文件,可能很大的文件(並且很難讓開發人員推理),因爲每次需要新的jQuery回調時,都會將其添加到public/javascripts/application.js
。您可以將實用程序模塊與供應商代碼混合在一起,並且您需要提取某些日期的JavaScript。用DHH的話說,這是一個垃圾抽屜。
資產管道爲我們提供了位置約定,每個控制器一個文件以及打包/優化Javascript,以便客戶端的下載速度更快。
綜述:Rails scaffolding命令生成app/assets/javascripts/your_controller.js.coffee
。在這個文件中,您應該添加與該控制器提供的視圖相關的Javascript。這是一個最佳實踐和一個好主意。
值得注意的是,所有的Javascript代碼最終都是由計算機編譯成一個大文件,並且有時候這個抽象漏洞。 (例如,兩個不同的javascript文件完全意外地將兩個不同的事件綁定到相同的Javascript id)。這些漏洞的抽象是爲什麼資產管道存在很多尖銳的邊緣,以及SO上的很多資產管道問題。