2012-09-24 104 views
12

我對Kendo UI自動完成組件變得很瘋狂。我使用自己的函數通過jQuery訪問數據,所以我必須將AutoComplete的dataSource.transport.read設置爲函數。代碼是這樣的。Kendo 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',dataSource.transport.read永遠不會再被調用。太令人沮喪了!

我試圖使用自動同步數據源屬性,手動數據源同步,自動完成對數據綁定設置新的數據源對象,但沒有運氣。

我在做什麼錯?我忘了什麼?

在此先感謝。

回答

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

這是驚人的! AutoComplete現在就像一個魅力!我花了很多時間處理它,我變得瘋了!非常感謝! – vermicida

+0

同樣的問題在這裏,解決方案是最有幫助的! – HapiDjus