我开始在我的 Rails 应用程序中使用Hotwire,并实现了类似于教程视频的内容,其中提交了表单并刷新了页面的另一部分。就像在视频中一样,我必须实现自己的重置表单控制器:
import {Controller} from "stimulus"
export default class extends Controller {
reset() {
this.element.reset()
}
}
重置表单中的值。表单看起来像:
<%= form_with(model: @invitation,
data: {controller: "reset-form",
action: "turbo:submit-end->reset-form#reset"}) do |form| %>
<!-- other form elements -->
<%= form.submit "Invite" %>
<% end %>
在按钮中生成如下:
<input type="submit" name="commit" value="Invite" data-disable-with="Invite">
因为有一个data-disable-with
,当你按下按钮时,它会被禁用以避免双击提交,这很棒。问题是它this.element.reset()
不会重置它。
处理这个问题的正确方法是什么?
我不是在寻找解决方法,我知道很多,但我正在寻找解决这个问题的干净解决方案。
这是由 UJS 引起的按钮的禁用吗?这是否意味着不应在 Stimulus 应用程序中使用 UJS?
reset
我可以从JavaScript 函数重新启用按钮,但如果输入按钮是这样指定的:
<%= form.submit "Invite", data: {disable_with: "Inviting, please wait..."} %>
value
然后按钮的原始标签 (完全重新加载页面。
我可以扔:
config.action_view.automatically_disable_submit_tag = false
并使用刺激控制器实现我自己的双击预防,但这感觉不对。问题不在于属性data-disable-with
,而在于它是如何实现的。