【问题标题】:Rails Sprockets: require different JavaScript based on variableRails Sprockets:根据变量需要不同的 JavaScript
【发布时间】:2016-06-14 15:08:18
【问题描述】:

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

主题被指定为一个 ENV 变量。

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

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

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

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

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

【问题讨论】:

    标签: javascript ruby-on-rails asset-pipeline sprockets


    【解决方案1】:

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

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

    【讨论】:

    • 哦,我明白了。我应该为每个主题创建一个 application..js 并需要其中的所有内容(应用程序范围和特定于主题的 JS);)
    • 基本上是的,这是真的。重要的部分是确定主题的逻辑位于每当请求时都会编译的位置(可能在 .erb 布局中)。
    • 补充一点:.js.erb.css.erb 上也可以有 ruby​​ 代码,只要记住在 config/environments/production.rb 中添加它们就像 config.assets.precompile += %w( foo.css.erb bar.js.erb ) 这样它们就包含在 assets:precompile 中/跨度>
    猜你喜欢
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多