Javascript 按日期范围筛选剑道数据源
我目前正试图通过使用剑道下拉列表来过滤剑道数据源,但它并没有像我预期的那样工作 我有一个剑道下拉列表,其中有一些选项,允许用户按1、3、6、9或12个月过滤数据源。我还使用Javascript 按日期范围筛选剑道数据源,javascript,kendo-ui,filtering,Javascript,Kendo Ui,Filtering,我目前正试图通过使用剑道下拉列表来过滤剑道数据源,但它并没有像我预期的那样工作 我有一个剑道下拉列表,其中有一些选项,允许用户按1、3、6、9或12个月过滤数据源。我还使用moment.js处理将月份添加到当前日期的操作 这是我的DropDownListonChange事件: onMonthRangeChange: function (e) { var value = e.sender.value(); switch (value) { case "1":
moment.js
处理将月份添加到当前日期的操作
这是我的DropDownListonChange
事件:
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
}
})
虽然我认为这会奏效,但事实并非如此。相反,它只是显示数据源中的所有内容。我甚至尝试将viewModel.mytaskdasource.query
更改为viewModel.mytaskdasource.filter
,但我只得到以下错误:
未捕获的TypeError:e.indexOf不是函数-kendo.all.js:1129
我还怀疑可能是因为剑道和moment.js使用了不同的时间格式,但即使将所有剑道日期解析为moment日期,我也会得到相同的错误。经过大量实验,我终于找到了解决方案 我更仔细地观察了这个错误,注意到它提到了一些关于
kendo.parseDate
的内容,因此我知道日期存在一些问题,导致过滤无法工作
我只是简单地在我的moment.js
date对象的末尾添加了toDate()
,现在一切正常了
我的筛选现在如下所示:
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
}
})