自定义网格过滤表达式
Custom Grid Filtering Expressions
快速项目背景:我正在将一些用于 ASP.NET grids/back 端数据源的 Telerik 移植到 Kendo angular UI 框架。
问题:我正在尝试实施网格过滤(必须自定义,因为我手动绑定以处理复杂的 paging/data 检索。
- 是否有 method/function 检索过滤器字符串而不是包含过滤器和运算符的对象模型? (显然,我可以自己将其展平,但这是一些代码)。这是一个代码片段...
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;
}
}
快速项目背景:我正在将一些用于 ASP.NET grids/back 端数据源的 Telerik 移植到 Kendo angular UI 框架。
问题:我正在尝试实施网格过滤(必须自定义,因为我手动绑定以处理复杂的 paging/data 检索。
- 是否有 method/function 检索过滤器字符串而不是包含过滤器和运算符的对象模型? (显然,我可以自己将其展平,但这是一些代码)。这是一个代码片段...
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;
}
}