2013-04-24 52 views
-1

我目前使用rails 2rails 3如何在rails中正確分離樣式文件?

該文檔說所有頁面的所有樣式都被編譯到一個文件中。

例如,一個新的Rails應用程序包含一個默認 應用程序/資產/ Java腳本/ application.js中含有 以下行文件:

// ... 
//= require jquery 
//= require jquery_ujs 
//= require_tree . 

我感興趣的是軌道的方法來處理這個。我如何在一個文件中編寫所有樣式。它是爲每個頁面做它還是它在單獨的文件中創建樣式?軌道2和軌道3之間的方法有什麼區別?

回答

1

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上的很多資產管道問題。

相關問題