提问人:Micah Alcorn 提问时间:11/5/2012 最后编辑:Micah Alcorn 更新时间:10/25/2020 访问量:4935
Rails :confirm 修饰符回调?
Rails :confirm modifier callback?
问:
我想调用一个 javascript 函数,该函数将以用户对确认框的响应为条件。
例如,我有以下锚点:
<%= link_to 'Sign Out', destroy_session_path, confirm: 'Are you sure that you would like to sign out?', method: :delete %>
我应该放弃不显眼的javascript并将我自己的jQuery回调绑定到我的锚点吗?
或者有没有某种神奇的方法可以将回调函数传递给 Rails url 助手?我在文档中没有看到任何关于回调的讨论。
答:
通过遵循源代码,我看到修饰符被传递给 convert_options_to_data_attributes 方法,该方法指向这些天与 Rails 捆绑在一起的 ujs 脚本(通过 jQuery 的不显眼的 javascript)。在这里,我们发现最终用户的响应被传递给使用 html 中的属性调用的事件。link_to
:confirm
confirm:complete
data-confirm
因此,答案似乎是“不,您不能通过 url 帮助程序传递回调”。但是您可以在 your 中放置一个回调来侦听此事件。这似乎是实现我的目标的最不显眼的方式,考虑到我仍然让 rails 处理事件预防和传播。我等待这一切发生,然后调用我的函数。app/javascript
$(document).on('confirm:complete', function (e, answer) {
if (answer) {
// user confirmed!
myCallbackFunction();
} else {
// user canceled!
}
});
我有一个类似的问题(如何为带有AJAX调用的html助手使用内联:confirm选项?@Micah的答案虽然有效,但并不是“Rails 3 way”的样子。
- remote:需要将 true 选项添加到link_to助手中,例如
link_to 'Sign Out', destroy_session_path, remote: true, confirm: 'Are you sure that you would like to sign out?', method: :delete
在控制器更改块中回答 js
respond_to
创建一个 JS 文件,其名称与您的方法相对应,例如 destroy_session.js.coffee
app/views/competitions/destroy_session.js.coffee:
jQuery ->
$("form[data-remote]").on "ajax:success", (e, data, status, xhr) ->
$(e.currentTarget).closest('tr').fadeOut()`
希望能有所帮助
2020 年,公认的答案对我不起作用。我最终做了这样的事情:
$(document).on('confirm:complete', function (e) {
if (e.originalEvent.detail[0]) {
// user confirmed!
myCallbackFunction();
} else {
// user canceled!
}
});
评论