旧版jQueryUI AutoComplete控件中的类别

时间:2015-09-15 21:01:29

标签: javascript jquery jquery-ui autocomplete

我坚持使用jQuery 1.7和jQueryUI 1.8.6,目前无法升级(我们有相当多的弃用和删除代码,此时无法升级)。

我可以使用jQueryUI's AutoComplete control,但我无法弄清楚如何使用类别 - 使用示例found here

$.widget( "custom.catcomplete", $.ui.autocomplete, {
    _create: function() {
      this._super();
      this.widget().menu( "option", "items", "> :not(.ui-autocomplete-category)" );
    },
    _renderMenu: function( ul, items ) {
      var that = this,
        currentCategory = "";
      $.each( items, function( index, item ) {
        var li;
        if ( item.category != currentCategory ) {
          ul.append( "<li class='ui-autocomplete-category'>" + item.category + "</li>" );
          currentCategory = item.category;
        }
        li = that._renderItemData( ul, item );
        if ( item.category ) {
          li.attr( "aria-label", item.category + " : " + item.label );
        }
      });
    }
  });

我收到错误:this._super is not a function,如果我删除该行,则在使用widget()调用Cannot read property 'element' of undefined时,以下行失败。

我知道jQuery插件的语法在版本之间发生了变化,但我似乎无法修改他们的示例,以便它可以与旧版本一起使用。 This question在1.7中暗示了略微不同的语法,但是当我摆弄它时,我只是不断出现错误。

知道我需要改变什么来使这项工作?

1 个答案:

答案 0 :(得分:1)

_super方法是在较新版本的jQuery UI中创建的,并且在以前的版本中不存在。要解决此问题,您可以致电$.ui.autocomplete.prototype._create.call(this);,它基本上与_super相同。

只要_renderItemData没有退出,您就必须将其更改为_renderItem,然后调用.data( "ui-autocomplete-item", item );

您的完整代码更改为:

$.widget("custom.catcomplete", $.ui.autocomplete, {
  _create: function () {
    $.ui.autocomplete.prototype._create.call(this);
    this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)");
  },
  _renderMenu: function (ul, items) {
    var that = this,
      currentCategory = "";
    $.each(items, function (index, item) {
      var li;
      if (item.category != currentCategory) {
        ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>");
        currentCategory = item.category;
      }
      li = that._renderItem(ul, item).data('ui-autocomplete-item', item);
      if (item.category) {
        li.attr("aria-label", item.category + " : " + item.label);
      }
    });
  }
});

小提琴工作:http://jsfiddle.net/qjw165sz/1/