3

以前在 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 很酷

4

2 回答 2

2

在没有 rails-ujs 的带有 Turbo 的 Rails 中调用确认弹出窗口,button_to我们需要使用这样的代码

<%= button_to 'Destroy', @post, method: :delete, form: { data: { turbo_confirm: 'Are you sure?' } } %>

或者

<%= button_to 'Destroy', @post, method: :delete, form: { data: { 'turbo-confirm': 'Are you sure?' } } %>

两者都生成data-turbo-confirm属性

所以我们需要添加这个属性而不是提交按钮(就像在 rails-ujs 中一样),而是直接添加到包含这个按钮的表单(让我提醒你这个标签会生成一个带有按钮的表单)

于 2022-02-05T00:26:19.527 回答
0

那么这是在哪里记录的呢?

我花了很多时间试图添加一个愚蠢的数据确认 link_to。destroy 的 link_to 版本是一个涡轮陷阱。那个陷阱不仅会删除对象,而且响应涡轮帧,会删除整个树结构!

我让 button_to 在刺激的帮助下工作,但在 button_to 文档中没有看到这个选项。

于 2022-02-23T02:14:11.693 回答