0

kendo Grid サーバー側のフィルタリングを使用しています。すべての列は正常に動作しています。購入日という名前の列があります。ここでは、以下に示すように日付ピッカーを使用してカスタム フィルタリングを使用しました。提案してください

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"
                                      }
                                  }

                              }
4

1 に答える 1

1

日付フィールドが常に理解できる形式でサーバーに正しく送信されるとは限らないようです。

たとえば、日付フィルターは次のようにサーバーに送信されます。 ][0][値]= 2013 年 11 月 12 日火曜日 00:00:00 UTC+0100

これを解決するために、カスタム マッピング コードを追加して、値をすべての日付フィールドからサーバーが理解できる形式に変更しています。そのためにparameterMapを使用します。

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);
                }
            });
        }
    });
}

実行中のデモについては、こちらを参照してください。

于 2013-11-16T10:37:43.850 に答える