2017-02-06 8 views
0

В настоящее время я пытаюсь фильтровать Kendo DataSource с помощью Kendo DropDownList, и он не работает так, как я ожидал.Фильтр Kendo DataSource по дате

У меня есть Kendo DropDownList, который имеет несколько параметров в нем, которые позволяют пользователю фильтровать DataSource на 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, но потом я просто получаю следующее сообщение об ошибке:

Uncaught TypeError: e.indexOf is not a function - kendo.all.js:1129

Я подозревал, что, возможно, это потому, что кэндо и moment.js используют различные форматы время, но даже после разбора всех дат кендо к моментальным датам я получаю те же ошибки.

ответ

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 
    } 
})  

 Смежные вопросы

  • Нет связанных вопросов^_^