Я использую фильтрацию сервера kendo Grid Server. Все столбцы работают нормально, у меня есть столбцы с именем даты покупки. Я использовал здесь выборочную фильтрацию с помощью Date Picker, как показано ниже. Но при фильтрации значения datePicker в непереходе на сервер. Пожалуйста, предложите
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" } } }
Похоже, что поля даты не всегда правильно отправляются на сервер в понятном формате.
Например, фильтр даты отправляется на сервер следующим образом: take = 5 & skip = 0 & page = 1 & pageSize = 5 & filter [logic] = and & filter [filters] [0] [field] = HireDate & filter [filters] [0] [operator] = eq & filter [filters ] [0] [значение] = Вт 12 ноя 00:00:00 UTC + 0100 2013
Чтобы решить эту проблему, я использую добавление кода пользовательского сопоставления для изменения значения из всех полей даты в формат, понятный серверу. Для этого я использую параметрMap .
parameterMap: function (options) { if (options.filter) { KendoGrid_FixFilter(dataSource, options.filter); } return options; }
Пользовательская функция отображения javascript KendoGrid_FixFilter определяется как:
// 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); } }); } }); }
Для запуска демо см. Здесь .