我目前正在尝试使用Kendo DropDownList来过滤Kendo数据源,但它并没有像我预期的那样工作。
我有一个Kendo DropDownList,其中有一些选项允许用户过滤数据源1,3,6,9或12个月。我还使用moment.js
来处理当前日期的月份添加。
这是我的DropDownList onChange
事件:
onMonthRangeChange: function (e) {
var value = e.sender.value();
switch (value) {
case "1":
var oneMonth = moment().add(1, "month");
var firstOfMonth = moment().startOf("month");
viewModel.myTaskDataSource.query({
logic: "and",
filters: [
{ field: "DueDate", operator: "gte", value: firstOfMonth },
{ field: "DueDate", operator: "lte", value: oneMonth }
]
});
break;
case "3":
// similar to above code except for 3 months
case "6":
// similar to above code except for 6 months
case "9":
// similar to above code except for 9 months
case "12":
// similar to above code except for 12 month
}
})
虽然我认为这会奏效,但事实并非如此。相反,它只显示DataSource中的所有内容。我甚至尝试将viewModel.myTaskDataSource.query
更改为viewModel.myTaskDataSource.filter
,但之后我收到以下错误:
未捕获的TypeError:e.indexOf不是函数 - kendo.all.js:1129
我也怀疑也许是因为Kendo和moment.js使用不同的时间格式,但即使将所有剑道日期解析为时刻日期,我也会遇到相同的错误。
答案 0 :(得分:0)
经过大量的实验,我终于找到了解决方案!
我更仔细地查看了错误并注意到它提到了kendo.parseDate
的内容,因此我知道导致过滤不起作用的日期存在问题。
我只是将toDate()
添加到我的moment.js
日期对象的末尾,现在一切都按预期工作了!
我的过滤现在如下所示:
onMonthRangeChange: function (e) {
var value = e.sender.value();
switch (value) {
case "1":
var oneMonth = moment().add(1, "month").toDate();
var firstOfMonth = moment().startOf("month").toDate();
viewModel.myTaskDataSource.filter({
logic: "and",
filters: [
{ field: "DueDate", operator: "gte", value: firstOfMonth },
{ field: "DueDate", operator: "lte", value: oneMonth }
]
});
break;
case "3":
// similar to above code except for 3 months
case "6":
// similar to above code except for 6 months
case "9":
// similar to above code except for 9 months
case "12":
// similar to above code except for 12 month
}
})