Rails:确认修饰符回调吗?

问题描述 投票:12回答:3

我想调用一个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帮助器?我没有在documentation中看到任何有关回调的讨论。

ruby-on-rails-3.2 unobtrusive-javascript link-to view-helpers link-to-remote
3个回答
24
投票

通过link_to的源代码,我看到:confirm修饰符传递给了convert_options_to_data_attributes方法,该方法指向这些天与Rails捆绑在一起的ujs script(通过jQuery兼容的JavaScript)。在这里,我们发现最终用户的响应是通过使用html中的confirm:complete属性传递给名为data-confirm的事件的。

因此看来答案是“不,您无法通过url帮助器传递回调”。但是您可以在app/javascript中放置一个回调以监听此事件。考虑到我仍在让Rails处理事件的预防和传播,这似乎是实现目标的最简单的方法。我等待所有这些事情发生,然后调用我的函数。

$(document).on('confirm:complete', function (e, answer) {
  if (answer) {
    // user confirmed!
    myCallbackFunction();
  } else {
    // user canceled!
  }
});

1
投票

我有类似的问题(How to use inline :confirm option for html helpers with AJAX calls?)。 @Micah的答案即使可行,也不是“ Rails 3 way”的意思。


0
投票

[2020年,接受的答案对我不起作用。我最终做了这样的事情:

© www.soinside.com 2019 - 2024. All rights reserved.