看一下 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
答案 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
函数,并执行类似于我之前解决方案中的操作。