从一个大的数据源剑道UI下拉列表加载速度慢

问题描述 投票:2回答:2

我使用的模板剑道下拉列表。它加载它用来签名记录的客户名称的列表。客户名单有8K条目。

形式加载好了,但如果我选择下拉列表来改变它需要大约10秒的名单出现在客户端名称。有什么我可以做,以加快这?

我的数据源:

 var dsClients = new kendo.data.DataSource({
    transport: {
        read: {
          url: "/data/clients/key",
          dataType: "jsonp"
      },
      parameterMap: function(options, operation) {
          if (operation === "read") {
              return options;
          }
      }
    },
    serverSorting: true,
    sort: [{ field: "text", dir: "asc" }]
});

模板中的元素:

 <input name="idclt_clm" data-bind="value:idclt_clm" data-value-field="value" 
   data-text-field="text" data-option-label="Select" data-source="dsClients" 
   data-role="dropdownlist" required validationMessage="Required" /> 
kendo-ui kendo-dropdown
2个回答
3
投票

有2个选项,我知道的。

  1. 您可以添加虚拟化,这是我刚刚从Kendo发现。
  2. 您可以关闭自动绑定,并使用需要2个字符会触发搜索前,搜索过滤器。下面是我如何与asp.net和JS做到了 @(Html.Kendo() .DropDownList() .Name("GridName") .HtmlAttributes(new { @class = "form-control" }) .DataSource(ds => ds.Read(read => read.Action("YourFunction","YourController").Data("filterFunction")) .ServerFiltering(true)) .MinLength(2)//number of characters for a valid search .Delay(250)//milliseconds delay to trigger search .AutoClose(false) .AutoBind(false) .IgnoreCase(true) .DataTextField("Text") .DataValueField("Value") .Placeholder("Enter at least 2 letters to search") .Filter(FilterType.Contains) ) <script> function filterFunction() { return { text: $("#GridName").data("kendoDropDownList").input.val() }; } </script>

如果搜索仍然很慢,你可以改变的字符数


1
投票

好吧,如果你做什么都?但这可能不是最好的形式给出,但对我来说它的工作。我有一个组合框,从一个级联事件获取其信息,所以它会尝试任何一种方式来填补它。因此,发送到填补服务器端的请求后,我有一个客户端的事件:

.Filter(Contains).MinLength(n).Filtering("Action")

这将让服务器通过Ajax赶上与表/列表与您正试图填补你的CB会话变种。然后过滤所需的项目,并将其发送回给你的CB。

© www.soinside.com 2019 - 2024. All rights reserved.