剑道自动完成配置

Posted

技术标签:

【中文标题】剑道自动完成配置【英文标题】:Kendo Autocomplete configuration 【发布时间】:2020-01-17 04:33:11 【问题描述】:

我是第一次尝试 Kendo 自动完成功能,但在配置时遇到了一些问题。

如果我输入 3 个字符并假设我删除文本,它会正常工作 完全来自多选字段,自动完成功能不起作用 直到我刷新页面。

当我们再次输入超过 3 个字符过滤调用 MVC 控制器时,我想避免这种情况,所以不会有很多服务器调用。(换句话说,服务器调用应该只在用户输入 3 个字符和休息时发生过滤应该发生在客户端)

这里是代码

                $scope.selectOptions = 
                    placeholder: "Search...",
                    noDataTemplate: 'No data found',
                    dataTextField: "Name",
                    dataValueField: "Id",
                    valuePrimitive: false,
                    autoBind: false,
                    //filter: "contains",
                    animation: 
                        close: 
                            effects: "fadeOut zoom:out",
                            duration: 300
                        ,
                        open: 
                            effects: "fadeIn zoom:in",
                            duration: 300
                        
                    ,
                    minLength: 3,
                    dataSource: 
                        //type: "odata",
                        serverFiltering: true,
                        serverPaging: true,
                        pageSize: 10,
                        filtering: function (e) 
                            var filter = e.filter;

                            if (!filter.value) 
                                //prevent filtering if the filter does not value
                                e.preventDefault();
                            
                        ,
                        transport: 

                            read: 
                                url: "/Configuration/GetData",
                                type: 'GET',
                                dataType: 'json'
                            ,
                            parameterMap: function (options, type) 
                               if (type === "read") 
                                    var paramMap = kendo.data.transports.odata.parameterMap(options);
                                    delete paramMap.$inlinecount; // <-- remove inlinecount parameter.
                                    delete paramMap.$format; // <-- remove format parameter.
                                   // return paramMap;

                                    return  searchCriteria: options.filter.filters[0].value;
                                 
                            ,
                            schema: 
                                data: function (data) 
                                    return data; // <-- The result is just the data, it doesn't need to be unpacked.
                                ,
                                total: function (data) 
                                    return data.length; // <-- The total items count is the data length, there is no .Count to unpack.
                                
                            
                        


                    
                ;
            $scope.selectedIds = [1, 2];
&lt;select kendo-multi-select k-options="selectOptions" k-ng-model="selectedIds" k-min-length="3" class="form-control"&gt;&lt;/select&gt;

【问题讨论】:

【参考方案1】:

将自动完成的数据源设置为不会从服务器获取任何内容的 localDataSource:

const externalDataSource = ... // what you have now
const localDataSource = new kendo.data.DataSource()
externalDataSource.bind("change", (e) => 
    localDataSource.data(e.sender.data())
)
externalDataSource.read()

【讨论】:

谢谢。由于 Kendo 没有 dataValueField,我正在尝试使用以下方法来获取选定的 id,但如果我在 Multiselect 中选择多个选项,它似乎不起作用。我如何获得多个 ID? 选择:函数(e) e.dataItem.Id 我没有用Angular,但是有一个valueField:telerik.com/kendo-angular-ui/components/dropdowns/multiselect/…

以上是关于剑道自动完成配置的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MVC 剑道树列表编辑器中实现剑道自动完成下拉菜单

选择后如何重置剑道自动完成中的文本

剑道自动完成搜索()方法不起作用

剑道自动完成数据源显示未找到数据

生成自动完成功能 Angular 和 Jquery

Angular-Kendo 在更改时自动完成所选值