2016-06-14 22 views
0

想象一下,我有一個Rails應用程序,它可以有多個主題,每個主題需要不同的JavaScript +主題間共享的JavaScript。Rails Sprockets:需要基於變量的不同的JavaScript

主題被指定爲ENV變量。

如何根據主題需要不同的JavaScript文件?

我願做類似這樣的東西在我的application.js文件:

/* Theme specific */  
//= require_tree "./theme/#{ENV[APP_THEME]}" 

/* Shared between all themes */ 
(function() { ... })(); 

這顯然是行不通的。 有人對此有所瞭解嗎?

回答

0

application.js運行一次並完成(當您的應用程序「編譯」時,可以這麼說)。只要它啓動了,對該變量的更改就不會起作用,因爲它將在啓動時根據ENV [APP_THEME]的值預編譯爲單個JavaScript文件。出於這個原因,application.js中的邏輯幾乎不是解決您的問題的正確方法。

完成此操作的方法實際上是從application.js中完全排除您的主題特定的javascript。然後,在你的佈局(大概是layouts/application.html.erb)用戶ENV [APP_THEME]中包含相應的javascripts。

+0

噢,我明白了。我應該創建一個應用程序。 .js每個主題,並要求在那裏的一切(應用程序範圍和主題特定的JS);) – ClementParis016

+1

基本上是的,那是真的。重要的部分是確定主題的邏輯存在於一個被請求時編譯的位置(可能以.erb佈局)。 – ConnorCMcKee

+0

只需添加:在'.js.erb'和'.css.erb'上使用ruby代碼也是可以的,只要記住像'config.assets.precompile + =%w(foo.css.erb bar .js.erb)'在'config/environments/production.rb'中,以便它們包含在'assets:precompile' –