2016-06-09 51 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