剑道网格中的自定义过滤器在使用USServerevr侧过滤时传递空值 [英] Custom Filter in kendo grid passing null values when usign serevr side filtering
问题描述
我正在使用kendo Grid Server端过滤.所有列都工作正常,我有一个名为购买日期的列.我在这里使用了使用Date Picker的自定义过滤,如下所示.但是在过滤datePicker的值时不会传递给服务器侧面..请建议
I am using kendo Grid Server side filtering.All columns are working fine,I have a columns named purchase date.I have used here custom filtering using Date Picker as shown below.But while filtering value of datePicker in not passing to server side..Please suggest
field: "purchase_date",
width: "120px",
title: "Purchase Date",
template: '#= kendo.toString(purchase_date, "MM-dd-yyyy") #',
filterable:
{
ui: function (element) {
element.kendoDatePicker(); // initialize a Kendo UI DateTimePicker
},
extra: false,
operators: {
date: {
eq: "Equals to",
lt: "Less than",
gt: "Greater than"
}
}
}
推荐答案
似乎日期字段并不总是以可理解的格式正确发送到服务器.
It seems that date fields are not always correctly send to the server in a understandable format.
例如,将日期过滤器发送给服务器,例如:take = 5& skip = 0& page = 1& pageSize = 5& filter [logic] = and& filter [filters] [0] [field] = HireDate& ; filter [filters] [0] [operator] = eq& filter [filters] [0] [value] = 星期二11月12日00:00:00 UTC + 0100 2013
For example a date filter is send to the server as : take=5&skip=0&page=1&pageSize=5&filter[logic]=and&filter[filters][0][field]=HireDate&filter[filters][0][operator]=eq&filter[filters][0][value]=Tue Nov 12 00:00:00 UTC+0100 2013
为了解决此问题,我正在使用添加自定义映射代码将所有日期字段中的值更改为服务器可以理解的格式.为此,我使用了 parameterMap .
In order to solve this, I am using adding custom mapping code to change the value from all date fields to a format which is understood by the server. I use the parameterMap for that.
parameterMap: function (options) {
if (options.filter) {
KendoGrid_FixFilter(dataSource, options.filter);
}
return options;
}
自定义映射javascript函数KendoGrid_FixFilter定义为:
The custom mapping javascript function KendoGrid_FixFilter is defined as:
// kendoDataSource = kendo.data.DataSource
// filter = kendo filter
function KendoGrid_FixFilter(kendoDataSource, kendoFilter, depth) {
if ((!kendoDataSource) || (!kendoFilter)) return;
if (!depth) depth = 0;
// console.log(depth + " - FixDatesInFilter:" + JSON.stringify(kendoFilter));
$.each(kendoFilter.filters, function (idx, filter) {
//console.log("filter = " + idx + " = " + JSON.stringify(filter));
if (filter.hasOwnProperty("filters")) {
depth++;
KendoGrid_FixFilter(kendoDataSource, filter, depth)
}
else {
$.each(kendoDataSource.schema.model.fields, function (propertyName, propertyValue) {
if (filter.field == propertyName && propertyValue.type == 'date') {
filter.value = kendo.toString(filter.value, _DefaultDateFormat); // "MM/dd/yyyy"
// console.log("changed = " + filter.value);
}
});
}
});
}
有关正在运行的演示,请参见此处.
For a running demo see here.
这篇关于剑道网格中的自定义过滤器在使用USServerevr侧过滤时传递空值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!