JavaScript 请教:Rails7 中 form_with 中的 submit 的 data-disable-wtih 不起作用

u1435638317 · 2022年01月08日 · 最后由 losingle 回复于 2023年10月27日 · 763 次阅读

在 Rails 7 中,data-disable-wtih 是由 rails-ujs 提供的功能,我发现和 turbo-rails js 搭配的话,表单提交时,提交按钮文字不变。把import "@hotwired/turbo-rails" 这一行去掉了就好了。

//app/javascript/application.js
/ Entry point for the build script in your package.json
import "@hotwired/turbo-rails"
import "./controllers"
import Rails from "@rails/ujs"
Rails.start()

请问这是一个已知的 bug 吗?另外我看了一些 Issue 讨论,Rails 以后是不是打算移除 rails-ujs 了啊?

https://github.com/hotwired/turbo/pull/386

似乎是不支持 data-disable-with 了,新的方法是建议用 css 显隐相关信息,这样更适用于一些复杂的结构——例如显示动画图标。

button                  .show-when-disabled { display: none; }
button[disabled]        .show-when-disabled { display: initial; }

button                  .show-when-enabled { display: initial; }
button[disabled]        .show-when-enabled { display: none; }
<button>
  <span class="show-when-enabled">Submit</span>
  <span class="show-when-disabled">Submitting...</span>
</button>

rails-ujs 应该要移除了,新创建一个项目没看到 ujs。

turbo 和 ujs 搭配有问题,ujs 也不会在为支持 Rails 升级,如何在使用 turbo 时仍想使用 ujs,可以使用 https://mrujs.com/

3 楼 已删除

data: { turbo: "false" }解决问题

/ fix disable_with on link and submit inside turbo-frame
Rails.delegate(document, Rails.linkDisableSelector,   "turbo:before-cache", Rails.enableElement)
Rails.delegate(document, Rails.buttonDisableSelector, "turbo:before-cache", Rails.enableElement)
Rails.delegate(document, Rails.buttonDisableSelector, "turbo:submit-end", Rails.enableElement)
Rails.delegate(document, Rails.formSubmitSelector, "turbo:submit-start", Rails.disableElement)
Rails.delegate(document, Rails.formSubmitSelector, "turbo:submit-end", Rails.enableElement)
Rails.delegate(document, Rails.formSubmitSelector, "turbo:before-cache", Rails.enableElement)

as181920 回复

7.0.1 吗

turbo 中 使用 data-turbo-submits-with 来代替原来 UJS 的 data-disable-with

需要 登录 后方可回复, 如果你还没有账号请 注册新账号