Событие, запускаемое виджетом Jquery, не обрабатывается и не запускается

У меня есть очень простой виджет, который, по-видимому, запускает событие через _trigger что я не могу связать:

; (function ($) {
    $.widget('testspace.ftpWidget', {
        options: {},
        widgetEventPrefix: 'ftpwidget:',
        _create: function () {
            var that = this;
            that.paused = ko.observable(false);
        },
        _triggerPlayerInitialized: function () {
            console.log("player initialized");
            this._trigger("testeventname", null, null);
            console.log("player testeventname supposedly fired");
        },
        pause: function () {
            this.paused(!this.paused());
            console.log("player paused");
            this._triggerPlayerInitialized();
        },
        _destroy: function () { },
        _setOption: function (key, value) { }
    });
}(jQuery));

В HTML-файл:

<script>
   jQuery(document).ready(function ($) {
      $('#videoA').ftpWidget();
      var widget = $('#videoA').data("testspace-ftpWidget");
      console.log(widget);
      $(widget).on("ftpwidget:testeventname", function (event, data) {
          console.log("widget initialized");
      });
      widget.pause();
 });

И вывод консоли:

Консольный вывод

Почему это событие не обрабатывается / или даже не запускается? Как я могу отладить это?

Обновить:

Этот ответ, хотя и не моя проблема, дал мне подсказку. ОП звонит on привязка от элемента body, Итак, я изменился

 $(widget).on("ftpwidget:testeventname", function (event, data) {

в

 $("body").on("ftpwidget:testeventname", function (event, data) {

и это сработало, так же

 $("#video").on("ftpwidget:testeventname", function (event, data) {

Так что теперь у меня это работает, но я не понимаю, почему. Это сфера "вещь"? я думал

"Я хочу зарегистрироваться на testeventname на widget"

Что тут происходит?

1 ответ

Сам по себе _trigger может вызвать вашу функцию. В первом параметре вы указываете имя функции обратного вызова, которую вы хотите вызвать. Так что, если вы должны были изменить:

$('#videoA').ftpWidget();

в

$('#videoA').ftpWidget({
  testeventname: function (event, data) {
    console.log("widget initialized");
  }
});

это также будет работать.

JQuery-UI: как использовать фабрику виджетов

Другие вопросы по тегам