2016-06-14 5 views
0

테마마다 다른 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]의 값에 따라 하나의 자바 스크립트 파일로 미리 컴파일되어 있으므로 변수를 변경하지 않아도 영향을 미치지 않습니다. 이러한 이유로 application.js의 논리는 거의 확실하게 문제의 적절한 해결책이 아닙니다.

실제로이 작업을 수행하는 방법은 테마별 자바 스크립트를 application.js에서 완전히 제외하는 것입니다. 그런 다음 레이아웃 (아마도 layouts/application.html.erb) ENV [APP_THEME] 사용자에게 해당 자바 스크립트를 포함 시키십시오.

+0

잘 보입니다. 하나의 응용 프로그램을 만들어야합니다. .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'에 포함됩니다. –