2012-09-24 36 views
12

Me estoy volviendo loco con el componente Kendo UI AutoComplete. Estoy usando mis propias funciones para acceder a los datos con jQuery, así que tengo que configurar AutoComplete dataSource.transport.read como una función. El código es algo como esto.Kendo UI Autocompletar el origen de datos transporte lee solo una vez

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

Este código funciona perfectamente, pero dataSource.transport.read se llama sólo una vez. Hago una primera búsqueda con el texto 'michae' y el componente AutoComplete ejecuta su dataSource.transport.read como se esperaba. Luego, agrego una carta más para buscar 'michael', y dataSource.transport.read nunca se vuelve a llamar. ¡Es muy frustrante!

Intenté usar la propiedad autoSync dataSource, manual dataSource Sync, establecer nuevos objetos dataSource en el dataBound de autocompletar, pero no tuve suerte.

¿Qué estoy haciendo mal? ¿Qué estoy olvidando?

Gracias de antemano.

Respuesta

24

Debe habilitar serverFiltering para que la fuente de datos realice solicitudes cada vez.

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

¡Es asombroso! ¡El Autocompletar funciona como un amuleto ahora! Pasé mucho tiempo lidiando con eso, ¡me estaba volviendo loco! ¡Muchas gracias! – vermicida

+0

¡El mismo problema aquí y la solución fue de lo más útil! – HapiDjus

Cuestiones relacionadas