【问题标题】:Why parameterMap is not calling in KendoGrid?为什么 parameterMap 不在 KendoGrid 中调用?
【发布时间】:2021-09-24 15:07:52
【问题描述】:

具有以下剑道网格:

this.kGrid = $element.kendoGrid({
columns: [
    { field: 'Title' },
    { field: 'Description' },
    {
        field: 'StartDate',
        title: 'Start Date',
        template: `#= kendo.toString(kendo.parseDate(DistributionDate), "${DATE_FORMAT} ${TIME_FORMAT}")#`,
    }
],
filterable: true,
dataSource: {
    type: 'aspnetmvc-ajax',
    transport: {
        read: {
            url: '/Pubs/GetPubs',
            dataType: "json",
            type: 'POST',
            data: () => ({
                collectionId: this.selectedCollection,
                categoryUid: this.selectedCategory
            })
        },
        parameterMap: function (data, type) {
            //i wawnt to add some logic here to convert StartDate from local time to UTC
        }
    },
    serverFiltering: true,
    schema: {
        data: 'Data',
        total: 'Total',
        model: {
            id: 'Uid',
            fields: {
                Title: { type: 'string' },
                Description: { type: 'string' },
                StartDate: { type: 'date' }
            }
        }
    }
}
}).data('kendoGrid');

所以我有一个包含 3 列的网格,它们都是可过滤的。我的目标是将 StartDate 过滤器中的日期从本地时间转换为 UTC。这就是我添加 parameterMap 处理程序的原因。但是由于某种原因,根本没有调用 parameterMap 方法。我在这里做错了什么? 这是完整的代码 sn-p - https://dojo.telerik.com/IqadArAn/3。但问题在这里无法重现

编辑:似乎问题出在 dataSource 类型中,即“aspnetmvc-ajax”。如果要更改数据源类型,parameterMap 有效。

【问题讨论】:

  • 你能提供例子吗
  • 如果在参数映射中添加console.log(data),控制台中是否会出现任何内容?
  • @David,不,控制台很清楚。还尝试在 parameterMap 中设置断点,但从未触发。
  • 我已经在一个示例中测试了确切的代码 sn-p 并且似乎调用了 parameterMap -dojo.telerik.com/IqadArAn
  • 数据源中不同类型背后的想法是它们为您提供了预定义的 parameterMap 和 schema 函数。因此,如果设置了类型,则 parameterMap 将来自源,它不会尊重自定义 parameterMap 功能。

标签: kendo-ui kendo-grid


【解决方案1】:

替代解决方案是:

  1. 跳过设置传输类型
  2. 实现自定义读取方法

这个问题描述了类似的问题 - https://www.telerik.com/forums/datasource-transport-function-mode-read-and-wrong-request-parameters

这里是自定义read方法的代码,应该放在dataSource.transport里面。

read: (optionsData) => {
                            if (optionsData.data.filter) {
                                optionsData.data.filter.filters.forEach((item) => {
                                    if (item.field === "StartDate") {
                                        item.value = item.value.toISOString();
                                    }
                                });
                            }
                            var data = kendo.data.transports["aspnetmvc-ajax"].prototype.options.parameterMap.call({ options: { prefix: "" }}, optionsData.data, "read", false);
                            data.encryptedCollectionId = this.selectedCollection;
                            data.categoryUid = this.selectedCategory;

                            $.ajax({
                                type: "POST",
                                url: 'Pubs/GetPubs',
                                data: data
                            })
                            .then(
                                function succes(res) {
                                    optionsData.success(res);
                                },
                                function failure(res) {
                                    optionsData.error(res);
                                }
                            );
                        }

【讨论】:

    猜你喜欢
    • 2014-04-28
    • 1970-01-01
    • 2013-08-13
    • 2013-06-08
    • 1970-01-01
    • 2014-05-02
    • 2020-08-12
    • 1970-01-01
    相关资源
    最近更新 更多