這只是一個簡單的問題,因爲我無法弄清楚這裏的實際問題,也許有人有更多的經驗來擴展jQuery UI部件。擴展jquery-ui菜單部件失敗,但它不應該
我試圖更改menu._close
方法中的一些行爲,擴展Widget是這樣的:
(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對象。但我的問題是,爲什麼?
我只擴展了這個方法,沒有改變任何功能,只在之後加入了一個調試程序,原來的方法被調用,只傳遞給它的參數。我在這裏做錯了什麼?
在此先感謝,祝你週末愉快!
非常感謝!那麼,那麼我在本教程中遇到了一些問題:https://gist.github.com/scottgonzalez/962848這裏_super()方法使用'_create'作爲參數,所以我認爲它是需要的。 (我在別的地方查了'_super'方法,並且在那裏也記錄了這種方法),也許我讀過時的信息。 – Katai 2013-04-20 12:52:14
@Katai,那個教程可能指的是以前的jQuery UI版本(從那時起widget工廠被改版了)。也就是說,即使是官方文檔也很奇怪(比如說'_super()'不接受參數)。我仔細檢查了當前的源代碼,該模式肯定是「不傳遞方法名稱,傳遞任何其他參數」。 – 2013-04-20 13:13:09