繁体   English   中英

ActiveAdmin 可以加载 webpack 捆绑的 javascript 吗? - 导轨 5.1

[英]Can ActiveAdmin load javascript bundled by webpack? - Rails 5.1

我已经从 rails 4.2.6 升级到 rails 5.1,然后开始使用 webpack。
使用 webpack 的所有设置都已完成,但我不知道如何在 ActiveAdmin 页面上加载 javascript 文件。
ActiveAdmin 默认加载app/assets/javascripts/active_admin.js.coffee
有没有办法在 ActiveAdmin 页面上加载由 webpack 捆绑的 javascript 文件?

我有点晚了,但我相信包装方法而不是完全覆盖类更好。 此外,猴子修补Header将导致标签在id="header" div 中呈现。 为了在<head />呈现它们,我执行了以下操作:

ActiveAdmin::Views::Pages::Base.class_eval do
  alias_method :original_build_active_admin_head, :build_active_admin_head

  def build_active_admin_head(*args, &block)
    original_build_active_admin_head(*args, &block)
    within @head do render '/custom_headers' end
  end
end

把这个文件放到config/initializers (这样它就不会在开发模式下每次都重新加载导致无限循环)文件夹并用你需要的任何东西创建一个app/views/_custom_headers.html.erb文件。

Webpack 尚未得到官方支持。 我们现在使用的方法是修补 ActiveAdmin::Views::Header 以包含标签来加载 Webpack 的生成输出,例如。

class ActiveAdmin::Views::Header < Component
  def build(namespace, menu)
    ...
    render "application/custom_header_tags"
  end
end

在我们的例子中,我们的 custom_header_tags.erb 使用React On Rails,但可以替换您喜欢的任何集成。

对于从 Rails 6.0 开始的新应用程序,Webpacker 已成为默认资源生成器。 您也可以选择将 Webpacker 用于 ActiveAdmin 资产,方法是更新您的配置以在安装时或手动打开 use_webpacker 选项。

在 active_admin 安装时:

rails g active_admin:install --use_webpacker

手动添加到 config/initializers/active_admin.rb

ActiveAdmin.setup do |config|
  config.use_webpacker = true
end

并运行生成器以获取默认的 Active Admin 资产:

rails g active_admin:webpacker

#build_active_admin_head的方法签名继续发展。 从 ActiveAdmin v1.3.1 开始,它不再需要参数。

此外,除了其他答案中描述的方法别名和组件覆盖方法之外,还有一种用于猴子修补 ActiveAdmin 的附加方法: module#prepend

下面是我如何覆盖 ActiveAdmin 正文布局(在我的登台环境中的页面上抛出一个大的“登台”横幅)和头部布局(添加对 webpacker 的javascript_pack_tag调用):

module AdminPageLayoutOverride
  def build_page(*args)
    within @body do
      render "layouts/global/environment_banner"
    end

    super
  end

  def build_active_admin_head
    super

    within @head do
      render "admin/custom_script_tags"
    end
  end
end

ActiveAdmin::Views::Pages::Base.send :prepend, AdminPageLayoutOverride

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM