2013-04-09 62 views
2

我從Rails 3.0.20到Rails 3.1.10進行了長期的升級。 (稍後我會升級到3.2,但我想在3.1與我的代碼庫工作的第一個比較重要的變化。我沒有一個測試套件,所以請多多包涵,因爲我克服了不少技術債務。謝天謝地,該應用程序並不那麼龐大或複雜。)將許多JS文件與Rails Asset Pipeline結合使用

我一直有我的應用程序中的各種視圖單獨的JS文件。現在,Asset Pipeline希望將所有這些組合到一個文件中。問題是,我的很多變量和函數名稱相互碰撞,通常只會導致問題。

我的假設是我需要在這裏使用某種類型的命名空間,然後在需要它的頁面上的特定命名空間中初始化代碼。

有沒有一個標準的方法來做到這一點?或者,總體上有更好的方法嗎?

澄清的一點說明:我還沒有準備好切換到CoffeeScript。

回答

0

資產管道將允許爲每個視圖分開的js文件。在app/assets/javascripts中,您將可以爲每個視圖分別創建一個js文件。因此,讓我們說你有模特書籍和雜誌。在應用程序/資產/ JavaScript的,你可以爲每個模型/視圖books.js和magazines.js(或咖啡)。

此外,如果你還沒有看過http://railscasts.com/episodes/282-upgrading-to-rails-3-1看看/看。

+0

這個答案沒有提到OP關心的變量/函數名稱衝突。 – 2017-02-15 17:14:27

4

資產管道的重點是清單文件。默認情況下,Rails的創建一個JavaScript文件在

app/assets/javascripts/application.js 

此清單使用指令申報資產的源文件的依賴。其中一個指令是

require_tree 

其工作方式需要目錄,但操作需要遞歸所有子目錄中的所有文件。在我的Rails應用程序生成的application.js包含

//= require_tree . 

這需要JavaScript的資產文件夾內的所有文件。通過刪除它,並不是所有的JavaScript文件都合併成一個。然後你必須要求每個視圖的JavaScript文件。這是在問題JavaScript file per view in Rails回答。


話雖如此,請重新考慮您的計劃。畢竟Rails不這樣做惹惱你,但爲了一個目的。出於效率的原因,您應該儘可能少地使用HTTP請求。如果所有的JavaScript代碼都被預先加載,你可能會獲得更好的性能,例如由於緩存。

+0

這個答案並沒有說明變量/函數名稱衝突是OP關心什麼。 – 2017-02-15 17:14:15

相關問題