如何使用为计算列指定的过滤器过滤剑道网格数据

Posted

技术标签:

【中文标题】如何使用为计算列指定的过滤器过滤剑道网格数据【英文标题】:How to filter kendo grid data using filter specified for computed column 【发布时间】:2014-04-26 21:32:16 【问题描述】:

看看这个jsfiddle

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

        schema: 
            model: 
                fields: 
                    OrderID:  type: "number" ,
                    Freight:  type: "number" ,
                    OrderDate:  type: "date" ,
                    ShipCity:  type: "string" ,
                    NewCol: type: "string"
                
            
        

grid中的列定义是,

        
            field: "NewCol",
            title: "Computed",
            template: '#= (OrderDate > new Date(1996,6,10) ) ? "False" : "True" #'
        

现在,我的问题是,没有使用该列过滤器过滤数据,即 True/False。如果我用 True/False 过滤,网格就会变空。

我尝试在数据源中为该列定义函数,如下所示,但它没有显示该列的任何数据。

NewCol: function () 
    console.log(this.get('OrderDate'));
    if (this.get('OrderDate') > new Date()) return 'False';
    else return 'True';
,

Ans显示js错误Uncaught TypeError: undefined is not a function

【问题讨论】:

在您的 JSFiddle 中,问题是您有服务器端过滤并且它不接受新列。这只是在您的 JSFiddle 中还是最终场景的一部分? 感谢您指出这一点。它只是在 jsfiddle 中。在实际场景中,过滤只发生在客户端,因为该列也在客户端定义。我已经更新了小提琴。 jsfiddle.net/paritosh/3TsGB 【参考方案1】:

有两种选择。第一个与您的 KendoUI 版本兼容,第二个您必须迁移到当前版本。

第一个解决方案,定义一个 schema.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;

从那里,该列就像从服务器收到的任何其他列一样,因此您可以使用它。

你可以看到你在这里修改了 JSFiddle http://jsfiddle.net/OnaBai/3TsGB/3/

第二个解决方案是使用一个新功能,该功能允许为模型中的字段定义定义 options.fields.fieldName.parse 函数,并执行类似于我在之前的解决方案中所做的事情。

【讨论】:

以上是关于如何使用为计算列指定的过滤器过滤剑道网格数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使剑道网格列自动宽度

如何应用 Kendo 上下文菜单过滤器来跳过前两个网格列

剑道网格自定义过滤器

如何使用虚拟化远程数据过滤剑道网格上的整个数据源

剑道 - 通过页面上的代码保存网格过滤器仅存在日期过滤器网格列的问题

如何“使用具有一些默认选择的多复选框过滤器在服务器端过滤 Kendo Grid 数据”