Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按日期范围筛选剑道数据源_Javascript_Kendo Ui_Filtering - Fatal编程技术网

Javascript 按日期范围筛选剑道数据源

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":

我目前正试图通过使用剑道下拉列表来过滤剑道数据源,但它并没有像我预期的那样工作

我有一个剑道下拉列表,其中有一些选项,允许用户按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
    }
})
虽然我认为这会奏效,但事实并非如此。相反,它只是显示数据源中的所有内容。我甚至尝试将
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
    }
})