2016-03-31 3 views
1

J'ai un KoGrid avec une ligne DateTime. Et je veux avoir la capacité de trier cette rangée. J'essaye d'implémenter la fonction personnalisée de sortFn pour comparer des chaînes de DateTimes au lieu. Mais cela ne fonctionne pas correctement (03/03/2017 14:20 supérieure à 31/04/2016 14:20)Comment implémenter le tri DateTime dans le KoGrid

sortFn:function (a, b) { 
      var a1 = moment(a,"'DD/MM/YYYY hh:mm A").format("YYYY-MM-DD HH:mm"); 
      var b1 = moment(b,"'DD/MM/YYYY hh:mm A").format("YYYY-MM-DD HH:mm"); 
       return (a1 > b1); 
       } 

https://jsfiddle.net/L681pgny/

Comment puis-je résoudre ce problème? Et comment je peux déboguer la fonction sortFn?

Question supplémentaire: La fonction de tri ne fonctionne que pour la page actuelle. Est-il possible de trier tous les éléments de toutes les pages et d'afficher 5 (pour l'exemple jsfiddle ci-dessus) les éléments correspondants sur la page?

+0

On dirait une fonction pure pour moi, donc vous pouvez non seulement déboguer, vous devriez être en mesure de test unitaire :) il – Jeroen

+0

doit mettre à jour la position de vos éléments en l'observaleArray (myData) après comparaison. –

Répondre

0

La fonction de tri doit renvoyer un 1 ou -1 ou 0 s'ils sont identiques. Vous ne retournerez 1 et 0.

sortFn:function (a, b) { 
    var a1 = moment(a,"'DD/MM/YYYY hh:mm A"); 
    var b1 = moment(b,"'DD/MM/YYYY hh:mm A"); 
    return a1.isBefore(b1) ? 1 : -1;} 
0
  • Lorsque vous utilisez le format que vous convertissez moment en chaînes, omite cette partie.
  • est pas bien documenté mais sortFn apparemment besoin de revenir 1 ou -1 fonctionne correctement

C'est ce que votre sortFn devrait contenir

var a1 = moment(a,"'DD/MM/YYYY hh:mm A"); 
 
var b1 = moment(b,"'DD/MM/YYYY hh:mm A"); 
 

 
return a1>b1?1:-1; 
 
      

Vérifiez travail fiddle