Kendo ui 如何使用为计算列指定的筛选器筛选剑道网格数据

Kendo ui 如何使用为计算列指定的筛选器筛选剑道网格数据,kendo-ui,kendo-grid,Kendo Ui,Kendo Grid,看看这个 我在剑道网格中有一个计算列(NewCol,如下代码所述),它启用了过滤器选项。这些列根据另一列的数据显示True/False schema: { model: { fields: { OrderID: { type: "number" }, Freight: { type: "number" },

看看这个

我在剑道网格中有一个计算列(NewCol,如下代码所述),它启用了过滤器选项。这些列根据另一列的数据显示True/False

        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中,还是这是最终场景的一部分?感谢您指出这一点。就在我中间。。在实际场景中,过滤只在客户端进行,因为列也在客户端定义。我已经更新了小提琴。