2012-09-24 33 views
12

Tôi trở nên điên rồ với thành phần AutoComplete UI Kendo. Tôi đang sử dụng các chức năng của riêng mình để truy cập dữ liệu với jQuery, vì vậy tôi phải thiết lập dữ liệu AutoComplete dataSource.transport.read như một hàm. Mã là một cái gì đó như thế này.Giao diện người dùng Kendo Giao diện chuyển nguồn dữ liệu AutoComplete chỉ đọc một lần

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

Mã này chạy hoàn hảo, nhưng dataSource.transport.read được gọi là chỉ có một lần. Tôi thực hiện tìm kiếm đầu tiên với văn bản 'michae' và thành phần AutoComplete chạy dataSource.transport.read như mong đợi. Sau đó, tôi thêm một chữ cái nữa để tìm kiếm 'michael' và dataSource.transport.read không bao giờ được gọi lại. Thật là bực bội!

Tôi đã thử sử dụng dữ liệu tự độngSource Thuộc tính nguồn, dữ liệu thủ côngSource Sync, đặt dữ liệu mớiCác đối tượng nguồn trên dữ liệu AutoCompleteBound, nhưng không có may mắn.

Tôi đang làm gì sai? Tôi đang quên gì?

Xin cảm ơn trước.

Trả lời

24

Bạn nên bật serverFiltering để nguồn dữ liệu có thể đưa ra yêu cầu mỗi lần.

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

Thật tuyệt vời! AutoComplete hoạt động như một sự quyến rũ ngay bây giờ! Tôi đã dành nhiều thời gian đối phó với nó, tôi đã trở nên điên rồ! Cảm ơn nhiều! – vermicida

+0

Cùng một vấn đề ở đây và giải pháp hữu ích nhất! – HapiDjus