2012-09-24 5 views
12

私は剣道UIオートコンプリートコンポーネントに夢中になりつつあります。 jQueryを使用してデータにアクセスするための独自の関数を使用しているので、AutoComplete dataSource.transport.readを関数として設定する必要があります。コードはこのようなものです。剣道UIオートコンプリートデータソースの転送は一度しか読み取られません

minLengthAtocomplete = 3; 

$('#autocomplete').kendoAutoComplete({ 
    minLength : 3, 
    filter : "contains", 
    dataValueField : "key", 
    dataTextField : "value", 
    dataSource : new kendo.data.DataSource({ 
     transport : { 
      read : _OnTransportRead 
     }, 
     schema : { 
      /* object schema */ 
     } 
    }) 
}); 

function _OnTransportRead(e) { 
    var text = $.trim(e.data.filter.filters[0].value); 

    if (text && text.length >= minLengthAtocomplete) { 
     _GetUsers(
      text, 
      function onSuccess(data) { 
       var users = []; 
       /* sets users with info in data */ 
       e.success(users); 
      }, 
      function onError(error) { 
       /* stuff with error */ 
      } 
     ); 
    } 
} 

function _GetUsers(userName, onSuccess, onError) { 
    /* Ajax to get users from DB */ 
} 

このコードは完璧に動作しますが、dataSource.transport.readは一度だけ呼ばれます。私はテキスト'michae'で最初の検索を行い、AutoCompleteコンポーネントはdataSource.transport.readを期待通りに実行します。次に、「michael」を検索するためのもう1文字を追加し、dataSource.transport.readが再び呼び出されることはありません。とてもイライラしています!

私はautoSync dataSourceプロパティ、手動dataSource Syncを使ってみましたが、AutoComplete dataBoundに新しいdataSourceオブジェクトを設定しましたが、運はありませんでした。

私は間違っていますか?私は何を忘れていますか?

ありがとうございます。

答えて

24

データソースが毎回要求を出すには、serverFilteringを有効にする必要があります。

$('#autocomplete').kendoAutoComplete({ 
    minLength : 3, 
    filter : "contains", 
    dataValueField : "key", 
    dataTextField : "value", 
    dataSource : new kendo.data.DataSource({, 
     serverFiltering: true, 
        transport : { 
            read : _OnTransportRead 
        }, 
        schema : { 
            /* object schema */ 
        } 
    }) 
}); 
+1

素晴らしいです!オートコンプリートは今の魅力のように機能します!私はそれを扱うのに多くの時間を費やした、私は狂っていた!どうもありがとう! – vermicida

+0

同じ問題があり、解決策が最も役立ちました! – HapiDjus

関連する問題