【发布时间】:2019-11-12 04:25:46
【问题描述】:
我正在尝试使用 Kendo UI 自动完成组件创建寻人控件。
此自动完成组件从 3rd 方产品获取数据源,该产品的 API 设计非常糟糕,无法吸引用户。没有 GET 端点会返回所有用户,但 API 只有一个搜索端点,我可以在其中提供关键字,它将返回与该关键字匹配的所有用户。因此,如果我需要从用户存储中获取所有用户,我需要发送 26 个(每个字母一个)发布请求并将结果合并到一个集合并将其传递给 Kendo 自动完成数据源。这使得页面非常慢。所以我尝试了以下方法:
- 在没有数据的情况下初始化 Kendo 自动完成控件。
- 构建自定义过滤事件处理程序,它将输入的值作为关键字传递给POST端点进行搜索,一旦获得用户列表,绑定控件的数据源。
$("#pplFinderCtrl").kendoAutoComplete({ dataSource:{ serverFiltering:true }, dataTextField:"Name", filter: "contains", placeholder: "Officer", filtering:async function(e){ var value:string = <string>$("#pplFinderCtrl").val(); console.log(value); const users:User[]=await ProfileService.searchUser(value.toString()); let ddl: any= $("#pplFinderCtrl").data("kendoAutoComplete"); ddl.setDataSource(users); console.log(users); } });
如果用户键入速度很慢,这很有效,但是当用户键入速度很快并且绑定后自动完成面板不会显示基于绑定到它的新数据的结果。最后一个按键的结果只有在按下下一个按键后才会出现在面板中。
我已经看到了 Kendo 服务器过滤选项,但我想在从 API 接收数据后对数据进行一些清理,然后再传递给 kendo 控件。
【问题讨论】:
标签: typescript kendo-ui