0

在 JQuery UI 中,调用 super/base 函数的正确语法是什么?在下面的示例中,我应该使用this._super(param1)or调用基本函数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);

        // ...
    }
});
4

1 回答 1

0

这在这里讨论: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);
    }
});
于 2020-04-01T23:57:02.837 回答