我正在使用 jQuery v1.8.3 和 jQuery UI v1.9.2。我想扩展现有的 jQuery UI 小部件(在我的例子中是Autocomplete小部件),方法是添加和覆盖一些选项和方法,但保持其他功能与官方版本中的功能相同。我怎样才能使它成为“正确”(也许是“标准”)的方式?
PS:我在网上搜索(1、2、 ... ),发现文档大多与创建新的jQuery UI 小部件相关,但与扩展现有小部件无关。
我正在使用 jQuery v1.8.3 和 jQuery UI v1.9.2。我想扩展现有的 jQuery UI 小部件(在我的例子中是Autocomplete小部件),方法是添加和覆盖一些选项和方法,但保持其他功能与官方版本中的功能相同。我怎样才能使它成为“正确”(也许是“标准”)的方式?
PS:我在网上搜索(1、2、 ... ),发现文档大多与创建新的jQuery UI 小部件相关,但与扩展现有小部件无关。
在 jQuery UI 1.9+ 中,扩展小部件的方式与创建新小部件的方式相同。小部件工厂 ( $.widget()
) 支持一些场景:
使用基本小部件 ( $.Widget
) 作为起点创建新小部件:
$.widget( "ns.widget", { ... } )
创建从现有小部件继承的新小部件:
$.widget( "ns.widget", $.ns.existingWidget, { ... } )
扩展小部件:
$.widget( "ns.widget", $.ns.widget, { ... } )
您会注意到扩展语法和继承语法是相同的。小部件工厂足够聪明,可以注意到您正在创建的小部件和您从其继承的小部件是相同的并适当地处理它。
当继承或扩展一个小部件时,您只需要定义您想要更改或添加的内容。基础小部件上还存在一些新方法,可以更轻松地使用继承和更改上下文的方法。阅读jQuery.Widget 文档以获取完整的方法列表及其描述。如果您正在扩展小部件,您肯定会想了解_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 );
},
});