0

Rails 提供了开箱即用的不同 ajax 事件。(更多信息可以在这里找到——https: //github.com/rails/jquery-ujs/wiki/ajax,源代码可以在这里找到——https: //github.com/rails/jquery-ujs/blob/master /src/rails.js#L125 )

现在我有一个自定义小部件,它_on()定义了两种方法。这是相关的代码片段:

_create: function() {
  this._on(this.document, {
    "ajax:beforeSend #some-form": function(event, xhr, settings) {
      return console.log("Before send");
    }
  });

  this._on({
    // Event listeners for widget local events 
  });
}

_on()我到了可以有两种方法并且两种方法都有效的地步。第一个监听内部发生的所有事件document(所以如果我有一些非常琐碎的click *事件,它会起作用),第二个监听只监听在小部件中触发的事件。

如果我将 rails 回调直接绑定到$(document).ready函数中的元素,一切正常。当我尝试将 rails 的事件侦听器和其他类似事件添加到第一种方法时,问题就开始ajax:beforeSendajax:success——_on()它根本不起作用。

任何想法如何将 Rails 事件与 jquery-ui 小部件事件侦听器结合起来?谢谢。

4

1 回答 1

1

如果您查看_on()jQuery UI 中的代码,您会发现它使用正则表达式/^(\w+)\s*(.*)$/来获取事件名称和选择器:

var match = event.match( /^(\w+)\s*(.*)$/ ),
        eventName = match[1] + instance.eventNamespace,
        selector = match[2];

显然,它认为您想要的ajax:beforeSend事件只是ajax和选择器一样:beforeSend #some-form,而不是触发处理程序。

如今,在内部使用冒号来制作事件名称是一种常见的做法,因此发送拉取请求可能是一个好主意。

同时,您可以为所需的事件注册全局处理程序,并使用不同的名称重新触发它们,而不需要在内部冒号。

于 2013-12-21T21:22:22.507 回答