【问题标题】:Ajax callbacks in rails3rails3 中的 Ajax 回调
【发布时间】:2013-01-26 12:40:52
【问题描述】:

在 rails 2 的 ajax 表单中,我们可以有 ajax 回调,例如 before、after 等。如何在 rails 3 中做到这一点。

【问题讨论】:

    标签: ruby-on-rails-3


    【解决方案1】:

    我遇到了同样的问题,this post 帮助我解决了这个问题。基本上,您需要将侦听器附加到对 rails 的回调事件作出反应的元素。例如:

    <%= link_to 'Delete', post, 
      :confirm => 'Are you sure?', 
      :method => :delete, 
      :remote=>true, 
      :id=>'delete' %>
    

    在单独的 js 文件中(使其不显眼),使用 jQuery:

    $('#delete').bind('ajax:success', function() {
      // do something
    });
    

    【讨论】:

    • 感谢 morbaq,我在谷歌搜索后也找到了它。但我认为可能有一些轨道方式。
    • Rails 3 已经摆脱了像 link_to_remote 这样的“内联 javascript”帮助程序,而转向了您需要以这种方式处理的 Unobtrusive JavaScript (UJS)。 AFAIK,上面的代码实际上是版本 3 以来的“rails 方式”。
    【解决方案2】:

    按照 morbaq 的建议将函数绑定到 ajax:success 对我有用。

    但是,我认为如果有多个 ajax 行为与元素相关联,则该函数将为它们中的每一个运行。

    【讨论】:

      【解决方案3】:

      如果您还想为 ajax 发送添加监听器,请使用以下代码

      $(document).ready(function() {
        $('#topnav-buildings').bind('ajax:beforeSend', function() {
          blockDiv('#topnav-buildings');
        });
      });
      

      我花了一个小时才找到这些 t2 东西

      1. 我们必须把它放在 document.ready 中
      2. 当你写 ajax:beforeSend 时,S 是大写的
      3. 不要使用 ajaxSend 代替 ajax:beforeSend .... 因为它为所有 ajax 事件添加了全局处理程序

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-01
        • 1970-01-01
        • 2011-09-27
        相关资源
        最近更新 更多