以前在 Rails 中使用button_to
标签时,可以使用这样的确认对话框
<%= button_to 'Destroy', @post, method: :delete, data: { confirm: 'Are you sure?' } %>
data: { confirm: 'Are you sure?' }
是 @rails/ujs 库在后台使用的 Rails 魔术数据属性
在 Rails 7 之后,默认情况下不再启用此库。而不是这个 Rails 使用 Turbo 库
现在这段代码不起作用
官方Rails 文档和Turbo 手册中没有信息
我试过的
<%= button_to 'Destroy', @post, method: :delete, data: { turbo_confirm: 'Are you sure?' } %>
<%= button_to 'Destroy', @post, method: :delete, data: { 'turbo-confirm': 'Are you sure?' } %>
但是没有结果
我在 SO 上没有找到任何解决方案,但在 Hotwire论坛上找到了。此解决方案具有刺激作用。我只是稍微改进一下
<%= form_with model: @post, method: :delete, data: { controller: 'confirmation', message: 'Are you sure?', action: 'submit->confirmation#confirm' } do |f| %>
<%= f.submit 'Destroy' %>
<% end %>
// app/javascript/confirmation_controller.js
import { Controller } from '@hotwired/stimulus'
export default class extends Controller {
confirm(event) {
if (!(window.confirm(this.element.dataset.message))) {
event.preventDefault()
}
}
}
它可以工作,但是很难,而且看起来很丑,而且我们习惯了 Rails 很酷