Rails Turbo Stream 渲染时 data-dismiss 等事件失效,有什么好办法?

Catherine · 2022年08月08日 · 最后由 Rei 回复于 2022年08月08日 · 198 次阅读

比如我这里遇到的是 tailwind 的 data-dismiss-target 无法生效。单纯是因为被 Turbo Stream 渲染,没有绑定上 dismiss 事件。

自己写 JS 重新绑定一下可以解决,有什么好一点的办法吗?

例如加个什么标签,类似以前

:turbolink => false

这种,让 turbo_frame 替换的时候,自动跳过这种标记的元素

tailwind 有 data-dismiss-target ?用了其他插件吧?

跳到结论:Stimulus 就是解决这问题的。

Rei 回复

说错了,是 flowbite。因为刚开始接触 tailwind 就配合着 flowbite 用的,脑子里就把他们给画等号了。😂

看了一下文档,只给了 plain js 的实例,意思就是让开发者根据自己用的框架包装。

用 Stimulus 写一个包装是这样:

// dismiss_controller.js

import { Controller } from "@hotwired/stimulus"
import { Dissmis } from "flowbite"

export default class extends Controller {
  connect() {
    const targetEl = document.querySelector(this.element.getAttribute('data-dismiss-target'))

    new Dismiss(targetEl, {
      triggerEl: this.element
    })
  }
}

用的时候加上 data-controller

<button type="button" class="..." data-dismiss-target="#alert-1" data-controller="dismiss">
    ...
</button>
Catherine 关闭了讨论。 08月08日 23:25
需要 登录 后方可回复, 如果你还没有账号请 注册新账号