我正在使用jQuery v1.8.3和jQuery UI v1.9.2。我想擴展現有的jQuery UI小部件(在我的情況下是Autocomplete小部件),只需添加和覆蓋一些選項和方法,但保留其他功能與正式版本中的功能相同。我怎樣才能做到「正確」(或許是「標準」)?如何擴展現有的jQuery UI小部件?
P.S.:我在網上搜索(1,2,...),我發現文檔主要與創建一個新的 jQuery UI小部件,但不擴展現有的。
我正在使用jQuery v1.8.3和jQuery UI v1.9.2。我想擴展現有的jQuery UI小部件(在我的情況下是Autocomplete小部件),只需添加和覆蓋一些選項和方法,但保留其他功能與正式版本中的功能相同。我怎樣才能做到「正確」(或許是「標準」)?如何擴展現有的jQuery UI小部件?
P.S.:我在網上搜索(1,2,...),我發現文檔主要與創建一個新的 jQuery UI小部件,但不擴展現有的。
在jQuery UI 1.9+中,擴展小部件的方式與創建新小部件的方式相同。微件工廠($.widget()
)支撐有幾個可能性:
使用鹼微件($.Widget
)爲出發點創建新的小窗口:
$.widget("ns.widget", { ... })
創建新的小部件,從現有的插件繼承:
$.widget("ns.widget", $.ns.existingWidget, { ... })
擴展一個小部件:
$.widget("ns.widget", $.ns.widget, { ... })
您會注意到擴展語法和繼承語法是相同的。這個widget工廠足夠聰明,可以注意到你正在創建的部件和你繼承的部件是相同的,並且適當地處理它。
當繼承或擴展小部件時,您只需要定義要更改或添加的內容。基礎小部件上還存在一些新的方法,以便更容易地使用改變上下文的繼承和方法。閱讀jQuery.Widget documentation以獲取完整的方法及其描述。如果你要擴展一個小部件,你一定要閱讀_super()。
下面是將默認delay
選項更改爲500
並添加新的選項prefix
被添加到所有建議的例子:
$.widget("ui.autocomplete", $.ui.autocomplete, {
options: {
delay: 500,
prefix: ""
},
_renderItem: function(ul, item) {
var label = item.label;
if (this.options.prefix) {
label = this.options.prefix + " " + label;
}
return $("<li>")
.append($("<a>").text(label))
.appendTo(ul);
},
});
*擴展*和*繼承*之間的區別是什麼? – user12882
繼承創建新的小部件,而不更改現有的小部件。擴展小部件會改變現有小部件的行爲,而不會創建新的小部件。 –
如果它保存了與我剛纔相同的時間/頭痛的任何人,請注意,由於它不基於早期版本中的Widget工廠,因此無法擴展jQuery UI的datepicker(版本1.10或更高版本)。看到這個問題http://stackoverflow.com/questions/25011698/extending-jquery-ui-datepicker。與其他小部件,延伸應該工作正常。 – jinglesthula
定義「擴展」。根據你想要做什麼,你通常只需要添加新的方法,然後重寫一些現有的方法來利用你添加的功能。如[自動完成accentFolding擴展](https://github.com/scottgonzalez/jquery-ui-extensions/blob/master/autocomplete/jquery.ui.autocomplete.accentFolding.js)。沒有太多的清潔和麪向未來的方式。 –
我認爲任何人都可以提供的唯一答案是你必須認真對待。你將不得不熟悉代碼庫,然後確保你維護任何合同功能與對方。 – thatidiotguy
@FabrícioMatté - 你的意思是「沒有太多清潔和麪向未來的方式」? – user12882