14

剣道UIオートコンプリートコンポーネントに夢中になっています。jQueryでデータにアクセスするために独自の関数を使用しているため、AutoCompletedataSource.transport.readを関数として設定する必要があります。コードはこんな感じです。

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は1回だけ呼び出されます。テキスト「michae」を使用して最初の検索を実行すると、オートコンプリートコンポーネントがそのdataSource.transport.readを期待どおりに実行します。次に、 「michael」を検索するためにもう1文字追加すると、dataSource.transport.readが再度呼び出されることはありません。とてもイライラします!

autoSync dataSourceプロパティ、手動dataSource Syncを使用して、AutoComplete dataBoundに新しいdataSourceオブジェクトを設定しようとしましたが、うまくいきませんでした。

私は何が間違っているのですか?何を忘れているの?

前もって感謝します。

4

1 に答える 1

26

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

$('#autocomplete').kendoAutoComplete({
    minLength : 3,
    filter : "contains",
    dataValueField : "key",
    dataTextField : "value",
    dataSource : new kendo.data.DataSource({,
        serverFiltering: true, 
        transport : {
            read : _OnTransportRead
        },
        schema : {
            /* object schema */
        }
    })
});
于 2012-09-24T20:32:04.313 に答える