2012-01-01 58 views
1

我認爲文檔http://guides.rubyonrails.org/asset_pipeline.html需要一些說明。他們陳述:Asset Pipeline and Rails 3.1 JS庫只針對一個控制器中的一個頁面

例如,如果產生ProjectsController,會出現在應用程序/資產/ Java腳本/ projects.js.coffee新 文件,另一個在 應用程序/資產/樣式表/ projects.css .scss。你應該把任何 的JavaScript或CSS唯一的控制器它們各自的資產內 文件,因爲這些文件可以隨後只爲這些控制器 用線如<%= javascript_include_tag PARAMS加載[:控制器]%> 或<% = stylesheet_link_tag params [:controller]%>。

這是我的理解是在生產模式下,所有的JS被打包成一個優化的文件,最好。我猜測,這個優化文件的緩存優於頁面專門加載不同的JS文件本身。

也許javascript_include_tag的要點是運行一些特定的JavaScript到該頁面。但是,application.js的默認值是包含樹,其中包含生成的文件。所以我猜測,必須調整爲不包含任何控制器特定的JavaScript。

這個答案在這裏Using Rails 3.1, where do you put your "page specific" javascript code?似乎提出了一個合理的方法來處理這個問題是將JS特性與div關聯起來,當JQuery沒有在頁面上看到div時,什麼都不執行。

那麼最佳實踐是什麼?我對控制器特定的div的理解是否正確?在application.js中包含樹的缺省值是否與控制器特定的js的目標衝突?

回答

0

在我看來,你不應該依賴application.js腳手架。 application.js需要整棵樹,但是這樣做是爲了使開始項目變得容易,並不意味着它應該保持這種方式。

您很可能會創建不同的文件「捆綁」,其中一些只會包含在特定頁面中。
例如,我的application.js只需要librairies和應用程序文件夾中的每個文件。這樣你仍然可以擁有頁面特定的js。

我想<%= javascript_include_tag params[:controller] %>可以是有用的,如果你有一些特定的控制器的大JavaScript文件。

0

它有衝突 - 你應該選擇一種方法(require_tree)或其他(加載每個控制器文件)。

第一個是最優的,並且使用css類定位頁面特定的js很簡單。

唯一一次你不想做這個的是管理部分(你會使用第二個清單)或一些其他專家功能,如只在特定頁面上的燈箱畫廊(所以你不要想要在網站上的其他js和css)。