Автозаполнение Kendo-UI

Я пытаюсь расширить элемент управления автозаполнением kendo-ui: я хочу, чтобы поиск начинался, когда пользователь нажимал ввод, поэтому в основном я должен проверять ввод пользователя при событии нажатия клавиши. Я попытался поймать событие keydown с помощью этого кода:

(function($) {
    ui = kendo.ui,
    Widget = ui.Widget
    var ClienteText = ui.AutoComplete.extend({
        init: function(element,options) {
            var that=this;
            ui.AutoComplete.fn.init.call(this, element, options);                
            $(this).bind('keydown',function(e){ console.log(1,e); });
            $(element).bind('keydown',function(e){ console.log(2,e); });
        },
        options: {
            [...list of my options...]
        },
        _keydown: function(e) {
            console.log(3,e);
            kendo.ui.AutoComplete.fn._keydown(e);
        }
    });
    ui.plugin(ClienteText);
})(jQuery);

Ни одно из связанных событий не вызывается, только _keydown, и тогда я делаю что-то не так и не могу вызвать автозаполнение "обычного" события нажатия клавиши. Я видел много примеров, которые расширяют базовый виджет и затем создают составной виджет, но я не заинтересован в этом, я только хочу добавить функциональность к существующему виджету. Может кто-нибудь показать мне, что я делаю не так?

Спасибо!

2 ответа

Решение

Этот код на самом деле работает:

  (function($) {
    ui = kendo.ui,
    ClienteText = ui.AutoComplete.extend({
      init: function(element,options) {
        ui.AutoComplete.fn.init.call(this, element, options);                
        $(element).bind('keydown',function(e){
          var kcontrol=$(this).data('kendoClienteText');
          if (e.which === 13) {
            kcontrol.setDataSource(datasource_clientes);
            kcontrol.search($(this).val());
          } else {
            kcontrol.setDataSource(null);
          }
        });
      },
      options: {
        name: 'ClienteText',
      }
    });
    ui.plugin(ClienteText);
  })(jQuery);

но я не знаю, правильно ли это сделать.

Как насчет того, чтобы избежать расширения и воспользоваться преимуществами встроенных опций и методов в существующем элементе управления: http://jsfiddle.net/vojtiik/Vttyq/1/

//create AutoComplete UI component
 var complete = $("#countries").kendoAutoComplete({
     dataSource: data,
     filter: "startswith",
     placeholder: "Select country...",
     separator: ", ",
     minLength: 50 // this is to be longer than your longest char
 }).data("kendoAutoComplete"); 

 $("#countries").keypress(function (e) {
     if (e.which == 13) {
         complete.options.minLength = 1; // allow search
         complete.search($("#countries").val());
         complete.options.minLength = 50; // stop the search again
     }
 });
Другие вопросы по тегам