2017-02-06 5 views
0

Ich versuche gerade, eine Kendo DataSource mit einer Kendo DropDownList zu filtern und es funktioniert nicht so, wie ich es erwartet hatte.Filter Kendo DataSource nach Datumsbereich

Ich habe eine Kendo DropDownList, die einige Optionen enthält, mit denen der Benutzer die DataSource nach 1, 3, 6, 9 oder 12 Monaten filtern kann. Ich verwende auch moment.js, um das Hinzufügen von Monaten zum aktuellen Datum zu verarbeiten.

Hier ist meine Dropdown onChange Veranstaltung:

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

Obwohl ich dachte, dies funktionieren würde, es funktioniert nicht. Stattdessen zeigt es nur alles in der DataSource. Ich habe sogar versucht viewModel.myTaskDataSource.query-viewModel.myTaskDataSource.filter ändern, aber dann bekomme ich nur die folgende Fehlermeldung:

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

Ich vermuten auch, dass vielleicht war es, weil Kendo und moment.js wurden verschiedene Zeitformate aber auch nach all den Kendo Daten Parsen Zu momentanen Daten bekomme ich die gleichen Fehler.

Antwort

0

Nach vielen Experimenten konnte ich endlich eine Lösung finden!

Ich schaute genauer auf den Fehler und bemerkte, dass es etwas über kendo.parseDate erwähnte, also wusste ich, dass es ein Problem mit den Daten gab, die die Filterung nicht funktionieren ließen.

Ich habe einfach toDate() auf das Ende meiner moment.js Datumsobjekte hinzugefügt und jetzt funktioniert alles wie erwartet!

Meine Filterung sieht nun wie folgt aus:

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