Правильный способ вызвать суперфункцию JQuery UI виджета? - PullRequest
0 голосов
/ 02 апреля 2020

В JQuery UI, какой правильный синтаксис для вызова супер / базовой функции? В моем примере ниже я должен вызывать базовую функцию, используя this._super(param1) или this._super('myFunction', param1)?

$.widget( "namespace.Foo", {
    _create: function () {
        // ...
        this._super( "_create" );
    },

    myFunction: function(param1) {
        // ...
    }
});


$.widget( "namespace.Bar", $.namespace.Foo, {
    _create: function () {
        // ...
        this._super( "_create" );
    },

    myFunction: function(param1) {
        // Is this correct?
        this._super('myFunction', param1);
        // or this?
        this._super(param1);

        // ...
    }
});

1 Ответ

0 голосов
/ 02 апреля 2020

Это обсуждается здесь: https://api.jqueryui.com/jQuery.widget/#method -_ super

Вызывает метод с тем же именем из родительского виджета с любыми указанными аргументами. По существу .call().

args От нуля до многих аргументов для передачи методу родительского виджета.

_setOption: function( key, value ) {
  if ( key === "title" ) {
    this.element.find( "h3" ).text( value );
  }
  this._super( key, value );
}

Так что он уже вызывает _create в вашем первом примере, поэтому теперь вы посылаете "_create" в качестве аргумента this._create() и на самом деле ничего не делаете.

Копая глубже, мы видим: https://learn.jquery.com/jquery-ui/widget-factory/extending-widgets/

_super() и _superApply() вызывают методы с тем же именем в родительском виджете. Обратитесь к следующему примеру. Как и предыдущий, этот пример также переопределяет метод open(), чтобы регистрировать «open». Однако на этот раз _super() запускается, чтобы вызвать диалоговое окно open() и открыть диалоговое окно.

$.widget( "custom.superDialog", $.ui.dialog, {
    open: function() {
        console.log( "open" );

        // Invoke the parent widget's open().
        return this._super();
    }
});

$( "<div>" ).superDialog();

Ваш первый виджет не мутирует, поэтому не уверен, что вам нужно вызвать _super() , В вашей мутации вам не нужно отправлять аргумент в _create(). Вы можете для другого.

$.widget( "namespace.Bar", $.namespace.Foo, {
    _create: function () {
        this._super();
    },
    myFunction: function(param1) {
        this._super(param1);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...