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

时间:2014-03-20 07:27:23

标签: kendo-ui kendo-grid

看一下 jsfiddle

我在kendo网格中有一个计算列( 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过滤,则网格变空。

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

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

1 个答案:

答案 0 :(得分: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函数,并执行类似于我之前解决方案中的操作。