Виджет jQuery, метод _on () и ajax-вызовы Rails

0

Rails предоставляет различные события ajax из коробки. (Больше информации можно найти здесь - https://github.com/rails/jquery-ujs/wiki/ajax, исходный код можно найти здесь - https://github.com/rails/jquery-ujs/blob/master/src/rails.js#L125)

Теперь у меня есть собственный виджет с двумя _on() методами _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 * это будет работать), а во втором - только события, запущенные в виджетах.

Если я связываю обратный вызов рельсов непосредственно с элементом в функции $(document).ready все работает отлично. Проблемы ajax:beforeSend, когда я пытаюсь добавить прослушиватель событий для rails ajax:beforeSend, ajax:success и другие подобные события в первый _on() - он просто не работает.

Любые идеи, как жениться на событиях rails на jquery-ui widget event listener? Благодарю.

Теги:
jquery-widgets

1 ответ

1
Лучший ответ

Если вы посмотрите код _on() в пользовательском интерфейсе jQuery, вы увидите, что он использует regexp /^(\w+)\s*(.*)$/ чтобы получить имя и селектор событий:

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

Очевидно, он видит ваш желаемый ajax:beforeSend как просто ajax и selector вроде :beforeSend #some-form и не запускающий обработчик.

В настоящее время принято делать имена событий с двоеточием внутри, поэтому может быть хорошей идеей отправить запрос на тяну.

Тем временем вы можете регистрировать глобальные обработчики для желаемых событий и перезапускать их с разными именами без внутреннего двоеточия.

  • 0
    Ура! Trigerring событие с другим именем сделал свое дело! Поблагодарить!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню