覆盖_renderItem和_renderMenu

时间:2012-12-28 16:21:50

标签: javascript jquery jquery-ui

如何仅为#global-search覆盖_renderItem?

$("#global-search").autocomplete({
   //       
})._renderMenu = function(ul, items) {
   var self = this;
   ul.append('<table class="ac-search-table"></table>');
   $.each( items, function( index, item ) {
     self._renderItem( ul.find("table"), item );
   });
});

2 个答案:

答案 0 :(得分:13)

请记住,您可以通过_create解决jQuery UI工厂方法(data)创建的窗口小部件的特定实例:

var widgetInst = $("#global-search").autocomplete({}).data('ui-autocomplete');

...或者,自jQuery UI 1.12起,通过instance()辅助方法:

var widgetInst = $("#global-search").autocomplete('instance'); 

因此,您可以使用自己的方法覆盖其方法:

widgetInst._renderMenu = function(ul, items) {
  var self = this;
  ul.append('<table class="ac-search-table"></table>');
  $.each( items, function( index, item ) {
    self._renderItem( ul.find("table"), item );
  });
};

答案 1 :(得分:0)

您有几个选择:

  1. 您可以覆盖_renderItem函数,以便在内部进行一些对象比较,并调用原始_renderItem函数或执行自定义代码。

  2. 您可以创建一个继承自autocomplete的新窗口小部件,并覆盖其中的功能。