Ruby on rails 3.2 Rails:确认修改器回调?

Ruby on rails 3.2 Rails:确认修改器回调?,ruby-on-rails-3.2,unobtrusive-javascript,link-to,view-helpers,link-to-remote,Ruby On Rails 3.2,Unobtrusive Javascript,Link To,View Helpers,Link To Remote,我想调用一个javascript函数,该函数将以用户对确认框的响应为条件 例如,我有以下锚: <%= link_to 'Sign Out', destroy_session_path, confirm: 'Are you sure that you would like to sign out?', method: :delete %> 我是否应该放弃不引人注目的javascript,将自己的jQuery回调绑定到我的锚 或者有没有什么神奇的方法可以将回调函数传递给Rails

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

通过跟随
链接到
源代码,我看到
:confirm
修饰符被传递到方法,该修饰符指向最近与Rails捆绑在一起的方法(通过jQuery的不引人注目的javascript)。在这里,我们发现通过使用html中的
data confirm
属性,最终用户的响应被传递到名为
confirm:complete
的事件

因此,答案似乎是“不,您不能通过url帮助器传递回调”。但您可以在
应用程序/javascript
中放置回调以侦听此事件。考虑到我仍在让rails处理事件预防和传播,这似乎是实现我的目标最不引人注目的方式。我等待所有这些发生,然后调用我的函数

$(document).on('confirm:complete', function (e, answer) {
  if (answer) {
    // user confirmed!
    myCallbackFunction();
  } else {
    // user canceled!
  }
});
我也有类似的问题()@迈卡的答案虽然有效,但并不是“Rails3Way”的意思

  • 远程:需要将true选项添加到指向帮助程序的链接中,例如
  • 链接到“注销”,销毁会话路径,远程:true,确认:“是否确实要注销?”方法::删除

  • 在控制器中,更改
    respond_to
    块以回答js

  • 创建一个名称与您的方法对应的js文件,例如destroy_session.js.coffee

  • app/views/competitions/destroy_session.js.coffee:
    希望这能有所帮助

    在2020年,被接受的答案对我不起作用。我最终做了类似的事情:

    $(文档).on('confirm:complete',函数(e){
    if(如原始事件详细信息[0]){
    //用户确认!
    myCallbackFunction();
    }否则{
    //用户取消!
    }
    });
    
    jQuery ->
      $("form[data-remote]").on "ajax:success", (e, data, status, xhr) ->
        $(e.currentTarget).closest('tr').fadeOut()`