如何使用 Turbo 在 Rails 中使用 button_to 调用确认提示
How to call confirm prompt using button_to in Rails with Turbo
以前在 Rails 中使用 button_to
标签时,可以使用这样的确认对话框
<%= button_to 'Destroy', @post, method: :delete, data: { confirm: 'Are you sure?' } %>
data: { confirm: 'Are you sure?' }
是 Rails 魔法数据属性,被 @rails/ujs 库在后台使用
在Rails 7之后,默认情况下不再启用此库。而不是这个 Rails 使用 Turbo 库
现在这段代码不起作用
官方暂无信息Rails docs and Turbo handbook
我试过的
<%= 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 forum 上找到了。该解决方案具有刺激作用。我只是稍微改进一下
<%= 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很酷
在 Rails 中使用没有 rails-ujs 的 Turbo 调用确认弹出窗口 window 使用 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)但 directly to form 包含此按钮(让我提醒您此标签生成带有按钮的表单)
我不完全理解这一点,但以下内容对我有用
<%= button_to post_path(post), method: :delete, form: { data: { turbo_confirm: 'Are you sure?' } } do %>
an svg which shows a trash can
<% end %>
.
我也没有任何看起来像 OP 的东西 confirmation_controller
以前在 Rails 中使用 button_to
标签时,可以使用这样的确认对话框
<%= button_to 'Destroy', @post, method: :delete, data: { confirm: 'Are you sure?' } %>
data: { confirm: 'Are you sure?' }
是 Rails 魔法数据属性,被 @rails/ujs 库在后台使用
在Rails 7之后,默认情况下不再启用此库。而不是这个 Rails 使用 Turbo 库
现在这段代码不起作用
官方暂无信息Rails docs and Turbo handbook
我试过的
<%= 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 forum 上找到了。该解决方案具有刺激作用。我只是稍微改进一下
<%= 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很酷
在 Rails 中使用没有 rails-ujs 的 Turbo 调用确认弹出窗口 window 使用 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)但 directly to form 包含此按钮(让我提醒您此标签生成带有按钮的表单)
我不完全理解这一点,但以下内容对我有用
<%= button_to post_path(post), method: :delete, form: { data: { turbo_confirm: 'Are you sure?' } } do %>
an svg which shows a trash can
<% end %>
.
我也没有任何看起来像 OP 的东西 confirmation_controller