2016-06-09 89 views
0

我在寫一個kendo UI自動填充小部件。要求是EACH TIME當我在「minLength」之後鍵入一個字母時,數據源需要從dB 動態加載,每次都是。一個問題是,當dataSource第一次加載成功時,它會停止加載數據。Kendo UI自動完成在打字時動態加載dBdata

的代碼片段是:

var data; 
function getDataFromDb(){ 
    // some code to grab dummyData from dB ... 
    return dummyData; 
} 
$("#someInputText").kendoAutoComplete({ 
    minLength: 2, 
    dataTextField: "someField", 
    dataSource: getDataFromDb(), 
    filter: "startswith" 
}); 

非常感謝。

有關該帖子的更多詳細信息。在我的情況下,我不使用readOption。本數據來源於另一個Ajax調用,如:

var data []; 
//fire this ajax call when input string length comes to 4... 
$.ajax({url: "some working url", success: function(result){ 
    var data = result; 
    startKendoAutoComplete(); 
    } 
}); 


function startKendoAutoComplete(){ 
    if(!$.isEmptyObject(data)) // set a breakPoint, have data 
    { 
     $("#inputText").kendoAutoComplete({ 
      minLength: 4, 
      dataSource : data, 
      ... 
     }); 
    } 
} 

此外,當輸入字符串的長度來4.然而,KendoAutoComplete沒有開始工作的Ajax調用將被解僱....

非常感謝你的支持。

+0

我不明白,你問到動態,從DB每次加載數據的用戶類型的東西,但初始化數據只有一次,你不想使用readOptions ...如果你在初始加載後沒有從服務器獲取任何東西,你怎麼能重新加載數據? –

+0

從數據庫動態加載日期的原因在於,數據非常龐大,實際應用程序中有近一百萬行。最初加載數據是不可能/不可行/禁止的。另外,加載數據的唯一方法是通過給定的ajax調用。非常感謝您的回覆。 – user2029505

+0

您如何期望在初始加載之後重新加載一些已過濾的數據而無需獲取任何內容? –

回答

0

如果您使用一個對象數組初始化dataSource,那麼您的小部件將僅與此數組一起工作。

您必須首先創建一個dataSource對象並將serverFiltering屬性設置爲true。然後,如果您沒有指定要提取數據的網址,則可以設置您自己的transport.read函數,然後您可以實現自己的邏輯。 read函數將收到readOption,其中將包含查詢遊覽數據的所有相關信息(頂部/跳過/過濾/排序...)。該readOptions還將提供應該用於返回值success功能:

dataSource: { 
    serverFiltering: true, 
    transport: { 
     read: function (readOptions) { 
      readOptions.success(getDataFromDb(readOptions)); 
     } 
    } 
}, 
+0

在你的答案上發佈一些額外的代碼/細節。感謝您的提示。 – user2029505