2012-09-24 11 views
12

Zaczynam być szalony dzięki komponentowi AutoComplete Kendo UI. Używam własnych funkcji do uzyskiwania dostępu do danych za pomocą jQuery, więc muszę ustawić funkcję autouzupełniania dataSource.transport.read jako funkcję. Kod jest podobny do tego.Kendo UI Autouzupełnianie transportu danych odbywa się tylko raz

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 */ 
} 

Ten kod działa perfekcyjnie, ale dataSource.transport.read nazywa się tylko raz. Robię pierwsze wyszukiwanie z tekstem "michae", a komponent AutoComplete uruchamia swój plik dataSource.transport.read zgodnie z oczekiwaniami. Następnie dodaję jeszcze jedną literę do wyszukania "michael", a dataSource.transport.read nigdy nie jest wywoływana ponownie. Jest taki frustrujący!

Próbowałem używać właściwości autoSync dataSource, manualna synchronizacja danych dataSource, ustaw nowe obiekty dataSource na autouzupełnianiu danych, ale bez powodzenia.

Co robię źle? O czym ja zapominam?

Z góry dziękuję.

Odpowiedz

24

Powinieneś włączyć serverFiltering, aby źródło danych mogło wysyłać żądania za każdym razem.

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

To niesamowite! Autouzupełnianie działa teraz jak urok! Spędziłem dużo czasu, aby sobie z tym poradzić, stawałem się szalony! Wielkie dzięki! – vermicida

+0

Ten sam problem tutaj i rozwiązanie było najbardziej pomocne! – HapiDjus