如何扩展现有的jQuery UI小部件?

时间:2012-12-04 20:15:05

标签: javascript jquery jquery-ui plugins extending

我正在使用jQuery v1.8.3和jQuery UI v1.9.2。我想通过添加和覆盖一些选项和方法来扩展现有的jQuery UI小部件(在我的情况下是Autocomplete小部件),但保留其他功能,如官方发布中的那些。我怎样才能使其成为“正确的”(也许是“标准”)方式?


PS :我在网上搜索了12,...),我发现文档主要与创建新 jQuery UI小部件,但不扩展现有小部件。

1 个答案:

答案 0 :(得分:38)

在jQuery UI 1.9+中,扩展窗口小部件的方式与创建新窗口小部件的方式相同。小部件工厂($.widget())支持以下几种方案:

使用基本窗口小部件($.Widget)作为起点创建新窗口小部件:

$.widget( "ns.widget", { ... } )

创建一个继承自现有小部件的新小部件:

$.widget( "ns.widget", $.ns.existingWidget, { ... } )

扩展小部件:

$.widget( "ns.widget", $.ns.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 );
    },
});