2010-08-24 62 views
1

我們目前正在重構我們的網站,我們決定只使用一個js庫(jquery)。問題在於,由於時間的限制,我們現在只能做到這麼多,我們必須讓它們共存。在rails中添加content_for內容

這很簡單,因爲我們擁有jQuery的無衝突的方法,這樣我就可以申報,然後jQuery的做任何衝突的事情,然後添加原型,像這樣:

<%= javascript_include_tag "jquery" %> 

<%= yield :jquery %> 

<%= javascript_include_tag "prototype", "effects", "dragdrop", "controls", "lowpro", "neo", "filter", "slider", "calendar", "application", 'alerts' %> 

然後我就叫content_for(:jQuery的)每當我需要添加一個特定的jQuery文件(這有沒有衝突函數)的部分需要它。所以沒有問題。

問題是當你包含2個部分與不同的jQuery文件。只有其中一個被調用,因爲content_for jquery已經被調用,它不會再被調用(所以讓我們在a.rhtml中說,我添加了a.js並且在b.rhtml中添加了b.js,只有a.js將包括在內)

一個解決方案是將所有東西都包含在一個主js文件中,但由於每個函數都存在,所以難以維護等等。有沒有辦法讓我可以追加到content_for當它已經有被稱爲?

我剛剛查了API:

http://apidock.com/rails/v2.3.8/ActionView/Helpers/CaptureHelper/content_for

似乎content_for實際上追加。但是,我發生了什麼,它只是不附加/清除。它只是完全忽略了第二個內容的呼叫

回答

1

退房Jammit。您只需在assets.yml中定義各種文件集,然後Jammit將它們打包並生成這些文件的縮小和壓縮版本以供部署。它非常易於使用,並且可以將功能保留在多個文件中,然後讓Jammit打包。這也可以提高客戶端的渲染速度,因爲它可以減少HTTP連接開銷,並且單個主文件可以輕鬆緩存,從而帶來快速的用戶體驗。

+0

嗯,我們已經有捆綁fu(目前不工作),但問題是我必須包括我的jquery文件之前調用原型(所以我可以返回$變量),因此收益率 – corroded 2010-08-24 08:11:15

+0

你也可以使用'var $ j = jQuery.noConflict()',然後你可以使用'$ j'作爲jquery,並且原型繼續使用'$'。這樣你可以並排使用它們。 – nathanvda 2010-08-24 11:14:58

+0

我的觀點是,如果您使用Jammit的資產,您可以按固定的順序打包所有的Javascript資產並停止擔心他們。 :) – 2010-08-24 18:48:49