2011-10-19 48 views
0

我一直無法理解爲什麼應該將擴展名.erb添加到app/assets文件夾中的普通.js文件中?這就是我想知道的:在Rails中將.js文件轉換爲.js.erb文件有什麼用處?

在我的應用程序中,我希望只有一個http請求用於將js文件包含在HTML頁面/ DOM的主體中。這可以通過在application.js清單文件中添加js文件名(包括行)來完成:

//= require jquery 
    //= require directory_name 
    //= require jQuery_plugins/carousel 
    //= require jQuery_plugins/word-editor 
    //= require jQuery_plugins/abc_something 

等等。

現在我有一個整個rails應用程序的javascripts的長列表,我希望清單文件以頁面特定的方式輸出(包含)javascripts。爲了管理這個問題,我嘗試添加條件,如:

if params[:controller] == "my_controller" && params[:action] == "index" 
     //= require jQuery_plugins/carousel 

而且我轉換的application.js到application.js.erb文件,看看是否奏效。但不是!它不起作用。 Manifest將輸出一切以其爲途徑。看起來SOF提出了類似的問題,但在答案中給出的解決方案看起來很老派,而且不太傳統。

Where-do-you-put-your-page-specific-javascript-code

那麼,什麼是真的,使用轉換成JS文件js.erb的?我能純粹在「js manifest」文件的基礎上管理頁面特定的輸出嗎?

+1

HTTP://documentcloud.github。com/jammit/ – sled

+0

這是我的問題的第二部分的答案。你是否也知道答案:爲什麼我們有「js.erb」擴展? – marvindanig

+0

http://stackoverflow.com/questions/1127697/js-erb-vs-js – sled

回答

1

所以,你有.js.erb,所以你可以在你的js中嵌入ruby代碼,這將被執行並輸出js到文件的中間。也許這個答案太明顯了。

您可能想要這樣做的一個原因是,使用asset_path helper將路徑嵌入到另一個應用程序資產的路徑中。我想認爲您也可以使用url_for或其他路由幫助程序,例如將URL嵌入到JS字符串文字中的特定應用程序操作中。但我還沒有嘗試過,而不是每個常用的Rails輔助方法在資產ERB中都是可用的,只有一個子集,它們並不總是像通常的幫助者一樣工作。

什麼,你可以不是你最初提出,嵌入紅寶石就是在當前請求或當前頁面的條件。這是因爲資產管道中的資產沒有爲每個請求編譯(即執行)(至少不是通常在生產中),它們僅在應用程序的生命週期中被編譯一次並被緩存 - 所以當時它們是編譯和緩存,沒有'當前'請求或頁面或請求params。

一般來說,.js.erb可能不會太頻繁使用,它只是爲了保持一致性,以防萬一需要它。可能還有其他奇怪的情況,即使沒有使用url helper方法,在代碼中生成JS代碼的Ruby代碼也會很方便。那麼爲什麼不這樣做呢,因爲資產管道意味着資產正在經歷一些處理/執行,如果你願意的話,讓你通過ERB發送它們也是很自然的。

1

我用它的東西,如:

if (<%=j @tarea.errors[:texto].any?.to_s%>){ 
    $('#texto_tooltip').html("<%= @tarea.errors[:texto].first.to_s %>"); 
    $('#texto_field').addClass("error-box"); 
} 

根據對象狀態我可以執行一些或jquery的另一個