这只是一个简单的问题,因为我无法弄清楚这里的实际问题是什么,也许有人在扩展jquery-ui小部件方面有更多经验。
我正在尝试更改menu._close
方法中的某些行为,像这样扩展小部件:
( function($, undefined ) {
$.widget('ui.menu', $.ui.menu, {
_close: function(startMenu) {
this._super('_close', startMenu)
console.log('extension works!')
}
} )
} (jQuery) );
据我所知,我发现这是正确的方法。但现在,问题是_super
方法。它应该调用原始的menu._close
方法,它确实会向它提供唯一的参数startMenu
。但是父方法失败了。
以下是原始jquery-ui menu._close
方法的来源:
_close: function( startMenu ) {
if ( !startMenu ) {
startMenu = this.active ? this.active.parent() : this.element;
}
startMenu
.find( ".ui-menu" )
.hide()
.attr( "aria-hidden", "true" )
.attr( "aria-expanded", "false" )
.end()
.find( "a.ui-state-active" )
.removeClass( "ui-state-active" );
}
现在,它告诉我TypeError: startMenu.find is not a function
,是的,这不是因为this.element
不是真正的jQuery对象。但我的问题是,为什么?
我只扩展了方法,不改变任何功能,只在调用原始方法后添加调试mesasge ,向其提供唯一参数。我在这里做错了什么?
提前致谢,祝周末愉快!
答案 0 :(得分:1)
_super()已经知道应该调用哪个基本方法,因此传递其名称是多余的。
你只需写:
_close: function(startMenu) {
this._super(startMenu);
console.log("extension works!");
}
在当前代码中,传递给基本方法的第一个参数将是方法名称而不是startMenu
,这确实会导致基本方法失败。