You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rails 7 + Import Map中使用Flowbite与Turbo?脚本失效求助

解决Rails 7 Import Map环境下Flowbite搭配Turbo的脚本生效问题

问题核心

Turbo通过局部更新切换页面,仅替换DOMContentLoaded为turbo:load不够——turbo:load仅在初始加载或页面刷新时触发,Turbo导航后的局部页面更新不会触发该事件,导致Flowbite组件未重新初始化。

具体解决步骤

1. 不修改Flowbite源码,通过Turbo事件手动初始化

在app/javascript/application.js中导入Flowbite后,监听Turbo的turbo:render事件(该事件在每次页面渲染完成后触发,包括Turbo导航后的局部更新),手动初始化组件:

import 'flowbite'

document.addEventListener('turbo:render', () => {
  // 初始化所有Flowbite组件
  window.Flowbite.initFlowbite();
})

2. 针对特定组件单独初始化(可选)

如果只需要初始化部分组件,可单独调用对应构造函数:

document.addEventListener('turbo:render', () => {
  // 初始化下拉菜单
  new Flowbite.Dropdown(document.querySelectorAll('[data-dropdown-toggle]'));
  // 初始化模态框
  new Flowbite.Modal(document.querySelectorAll('[data-modal-toggle]'));
  // 根据需求添加其他组件(如Tabs、Accordion等)
})

3. 验证Import Map配置

确保config/importmap.rb中正确引入Flowbite v1.5.3:

pin "flowbite", to: "https://ga.jspm.io/npm:flowbite@1.5.3/dist/flowbite.js"

4. 兼容Turbo Frame场景(可选)

如果使用Turbo Frame,额外监听turbo:frame-load事件:

function initFlowbite() {
  window.Flowbite.initFlowbite();
}

document.addEventListener('turbo:render', initFlowbite);
document.addEventListener('turbo:frame-load', initFlowbite);

内容的提问来源于stack exchange,提问作者Aleksandr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:25:27