Rails 链轮:根据变量需要不同的 JavaScript

Rails Sprockets: require different JavaScript based on variable

假设我有一个 Rails 应用程序,它可以有多个主题,每个主题需要不同的 JavaScript + JavaScript 在主题之间共享。

主题被指定为 ENV 变量。

如何根据主题要求不同的 JavaScript 文件?

我想在我的 application.js 文件中做类似的事情:

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

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

这显然行不通。 有人对此有想法吗?

application.js 是 运行 一次就完成了(可以这么说,当您的应用程序 "compiles" 时)。只要它启动,对该变量的任何更改都不会生效,因为它已经根据启动时的 ENV[APP_THEME] 值预编译到单个 javascript 文件中。因此,application.js 中的逻辑几乎肯定不是您问题的正确解决方案。

实现这一点的方法实际上是从 application.js 中完全排除您的特定主题 javascript。然后,在您的布局中(大概是 layouts/application.html.erb)用户 ENV[APP_THEME] 包含适当的 javascripts.