Kendo ui 如何使用为计算列指定的筛选器筛选剑道网格数据
看看这个 我在剑道网格中有一个计算列(NewCol,如下代码所述),它启用了过滤器选项。这些列根据另一列的数据显示True/FalseKendo ui 如何使用为计算列指定的筛选器筛选剑道网格数据,kendo-ui,kendo-grid,Kendo Ui,Kendo Grid,看看这个 我在剑道网格中有一个计算列(NewCol,如下代码所述),它启用了过滤器选项。这些列根据另一列的数据显示True/False schema: { model: { fields: { OrderID: { type: "number" }, Freight: { type: "number" },
schema: {
model: {
fields: {
OrderID: { type: "number" },
Freight: { type: "number" },
OrderDate: { type: "date" },
ShipCity: { type: "string" },
NewCol: {type: "string"}
}
}
}
网格中的列定义为
{
field: "NewCol",
title: "Computed",
template: '#= (OrderDate > new Date(1996,6,10) ) ? "False" : "True" #'
}
现在,我的问题是,数据没有使用列过滤器进行过滤,即True/False。如果使用True/False进行筛选,网格将变为空
我曾尝试在datasource中为列定义函数,如下所示,但它没有显示该列的任何数据
NewCol: function () {
console.log(this.get('OrderDate'));
if (this.get('OrderDate') > new Date()) return 'False';
else return 'True';
},
Ans显示js错误
未捕获类型错误:未定义不是函数
有两个选项。第一个版本与您的KendoUI版本兼容,第二个版本必须迁移到当前版本
第一种解决方案,定义一个模式。parse
函数,用于在读取时计算新列:
parse: function (data) {
var tgtDate = new Date(1996,6,10);
$.each(data.d.results, function(idx, elem) {
var d = parseInt(elem.OrderDate.substr(6));
elem.NewCol = (d > tgtDate ) ? "False" : "True";
});
return data;
}
从那里,该列与从服务器接收的任何其他列一样,因此您可以使用它
您可以看到您在这里修改了JSFIDLE
第二个解决方案是使用一个新功能,该功能允许为模型中的字段定义定义一个函数,并执行类似于我在上一个解决方案中所做的操作。在JSFIDLE中,问题是您有服务器端筛选,并且它不接受新列。这仅仅是在您的JSFIDLE中,还是这是最终场景的一部分?感谢您指出这一点。就在我中间。。在实际场景中,过滤只在客户端进行,因为列也在客户端定义。我已经更新了小提琴。