快速项目背景:我正在将一些用于 ASP.NET 网格/后端数据源的 Telerik 移植到 Kendo 角度 UI 框架。
问题:我正在尝试实现网格过滤(必须是自定义的,因为我手动绑定以处理复杂的分页/数据检索。
- 是否有任何方法/函数可以检索筛选器字符串而不是包含筛选器和运算符的对象模型?(显然,我可以自己扁平化它,但这是一些代码(。这是一个代码片段...
if (filter !== undefined) {
// Step through column filters
filter.filters.forEach((element: any) => {
// console.log(element);
// Step through individual filter for column
element.filters.forEach((curFilter: any) => {
console.log(curFilter.field);
console.log(curFilter.operator);
console.log(curFilter.value);
});
});
}
- 我仍在使用 .NET 网格用于其筛选器表达式的动态 linq 查询。来自 grid.filters 的筛选器表达式是否可以在后端使用 linq 动态查询正常工作,还是需要转换?
我觉得我在这里错过了一些东西,所以我想我应该开始对话。
谢谢!-布莱恩
根据您的评论答案,您尝试做的是获取过滤器和排序,就像它在网络上为 MVC 发送一样分页。
要使 kendo 执行此操作,您需要设置数据源类型并在页面中包含正确的文件。
文件名为 kendo.aspnetmvc.js或 kendo.aspnetmvc.min.js
并且数据源初始化应指定
dataSource: {
transport: {
type: 'aspnetmvc-ajax'
}
}
或者做他们正在做的事情
此脚本的 CDN 为 https://kendo.cdn.telerik.com/2018.1.221/js/kendo.aspnetmvc.min.js
我知道他们使用类似这个函数来做你在说的事情
function serializeFilter(filter, encode) {
if (filter.filters) {
return $.map(filter.filters, function (f) {
var hasChildren = f.filters && f.filters.length > 1, result = serializeFilter(f, encode);
if (result && hasChildren) {
result = '(' + result + ')';
}
return result;
}).join('~' + filter.logic + '~');
}
if (filter.field) {
return filter.field + '~' + filter.operator + '~' + encodeFilterValue(filter.value, encode);
} else {
return undefined;
}
}