为什么 parameterMap 没有在 KendoGrid 中调用?
Why parameterMap is not calling in KendoGrid?
具有以下 kendo 网格:
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 方法。我在这里做错了什么?
这是完整的代码片段 - https://dojo.telerik.com/IqadArAn/3。但问题在这里无法复现
编辑:问题似乎出在数据源类型中,即 'aspnetmvc-ajax'。如果更改数据源类型,parameterMap 有效。
替代解决方案是:
- 跳过设置传输类型
- 实现自定义读取方法
这个问题描述了类似的问题 - https://www.telerik.com/forums/datasource-transport-function-mode-read-and-wrong-request-parameters。
这里是自定义read方法的代码,应该放在dataSource.transport.[=12=里面]
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);
}
);
}
具有以下 kendo 网格:
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 方法。我在这里做错了什么? 这是完整的代码片段 - https://dojo.telerik.com/IqadArAn/3。但问题在这里无法复现
编辑:问题似乎出在数据源类型中,即 'aspnetmvc-ajax'。如果更改数据源类型,parameterMap 有效。
替代解决方案是:
- 跳过设置传输类型
- 实现自定义读取方法
这个问题描述了类似的问题 - https://www.telerik.com/forums/datasource-transport-function-mode-read-and-wrong-request-parameters。
这里是自定义read方法的代码,应该放在dataSource.transport.[=12=里面]
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);
}
);
}