2013-08-11 3 views
1

검도 -ui 자동 완성 컨트롤을 확장하려고합니다. 사용자가 입력 할 때 검색을 시작해야하므로 기본적으로 keydown 이벤트의 사용자 입력을 확인해야합니다. 나는이 코드로를 keyDown 이벤트 잡으려고 노력했습니다 : 나는 자동 완성을 뭔가를 잘못하고 있어요 및 호출 할 수있는 바인더 제본 이벤트 검도 -ui 자동 완성 확장

(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을하고 "정상"를 keyDown 행사. 기본 위젯을 확장 한 다음 합성 위젯을 만드는 많은 예제를 보았습니다.하지만 그렇게하는 것에는 관심이 없으며 기존 위젯에만 기능을 추가하려고합니다. 누군가 내가 잘못하고있는 것을 보여줄 수 있습니까?

감사합니다.

+0

초기화 함수 이렇게 : '$ (요소) .bind (함수 (E) { VAR K 컨트롤 = $ (이)'에서 KeyDown '.DATA ('kendoClienteText '); 경우 (e.which === 13) { kcontrol.setDataSource (datasource_clientes) kcontrol.search ($ (이) .val()); } 다른 { kcontrol.setDataSource (널) } }); 실제로' 내가 원하는 것을해라. 그러나 이것이 올바른 방법이라고 확신하지 못한다. 어떤 제안이라도 환영합니다! (코드 포맷팅에 대해 유감스럽게 생각합니다) –

+0

"검열"검도 자동 완성 컨트롤 검색 호출을 중단하는 방법을 코드에 여전히 표시하지 못합니까? – Vojtiik

+0

$ (요소) .bind ('keydown', function (e) {...})는 마술을 수행합니다. 실제로는 아래의 답변에서 작동하는 코드를 넣을 것입니다. –

답변

1

:

(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); 

하지만 난 알고하지 않습니다 그것을하는 올바른 방법입니다.

+0

참고 ... 처음 시도했을 때 최대 호출 스택 크기를 초과했습니다. 나는 '옵션'블록을 잊어 버렸다. 다른 누군가. – RMorrisey

2

무엇 방지에 대한 확장 및 기존 컨트롤 옵션과 방법에 빌드를 활용 :이 코드는 실제로 작동 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 
    } 
}); 
+0

좋은 생각인데,이 경우 모든 컨트롤에 대해 키 누르기 함수를 만들거나 클래스를 집계 한 다음 $ ('. myclass') 키 누르기 등을해야합니다. 컨트롤을 확장하려고합니다. , 예를 들어, $ ('# myinput'). myControl()뿐만 아니라 컨트롤 내부에 코드를 작성하는 복잡한 컨트롤을 가질 가능성이 있습니다. –