2016-06-14 12 views
0

テーマごとに異なるJavaScript + JavaScriptがテーマ間で共有される複数のテーマを持つことができるRailsアプリケーションがあるとします。Rails Sprockets:変数に基づいて異なるJavaScriptが必要です

テーマはENV変数として指定されています。

テーマに基づいて別のJavaScriptファイルを要求するにはどうすればよいですか?

私は私のapplication.jsファイルに次のような何かをしたいと思います:明らかに動作しません

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

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

。 誰かがそれについて考えていますか?

答えて

0

application.jsは1回実行されます(アプリケーションが「コンパイル」すると、話す)。起動時にENV [APP_THEME]の値に基づいて1つのjavascriptファイルにプリコンパイルされているため、その変数の変更は有効になりません。このため、application.jsのロジックは、あなたの問題の適切な解決策ではありません。

これを実行する方法は、実際にテーマ固有のjavascriptをapplication.jsから完全に除外することです。次に、レイアウト(おそらくlayouts/application.html.erb)のENV [APP_THEME]ユーザに、適切なjavascriptを組み込みます。

+0

よくわかります。私は1つのアプリケーションを作成する必要があります。 .jsテーマごとにすべてを必要とする(アプリケーション全体およびテーマ固有のJS);) – ClementParis016

+1

本質的にはい、それは本当です。重要な部分は、テーマを決定するロジックが、要求されたときにコンパイルされた場所に存在することです(.erbレイアウトの可能性が高い)。 – ConnorCMcKee

+0

ちょうど追加する: '.js.erb'と' .css.erb'にルビコードを入れても構いません。 'config.assets.precompile + =%w(foo.css.erb bar .js.erb) 'を' config/environments/production.rb'にコピーして 'assets:precompile'に含めます –