Groupe de données KnockoutJS ObservableArray
Ne KnockoutJS ont une fonction alors que je pourrais faire quelque chose comme:
var myArray = ko.observableArray([
{ name: "Jimmy", type: "Friend" },
{ name: "George", type: "Friend" },
{ name: "Zippy", type: "Enemy" }
]);
Puis select distinct sur le champ "type", produisant un résultat qui ressemble à ceci:
(pseudo code)
var distinct = myArray.distinct('type')
//Returns array of two arrays
// distinct[0] is an array of type=Friend
// distinct[1] is an array of type=Enemy
Je suis au courant de ko.utils.arrayGetDistinctValues, mais qui n'a pas exactement de faire ce que je veux. Je suis aussi conscient que je pourrais écrire quelques boucles à l'aide de ko.utils.arrayGetDistinctValues à obtenir ce que je veux, je me demandais simplement si il y a autre chose cuit dans KnockoutJS que je suis surplombant.
source d'informationauteur farina
Vous devez vous connecter pour publier un commentaire.
Il n'y a rien d'autre construit en KO pour rendre cela plus facile.
Il existe de nombreuses façons que vous pouvez faire ce travail. Par exemple, vous pouvez étendre observableArrays d'avoir un
distinct
fonction. Ensuite, vous pouvez tout simplement créer votre observableArray comme:La
distinct
fonction peut ressembler à:Il prend en charge le chaînage de sorte que vous pourriez appeler
distinct
plusieurs fois avec des propriétés différentes.Exemple ici: http://jsfiddle.net/rniemeyer/mXVtN/
Ce n'reconstruire l'index une fois sur chaque modification, donc, si vous avez une énorme liste d'éléments, vous pouvez éventuellement envisager d'autres moyens (manuel d'abonnements) pour l'ajout/suppression d'éléments de la "index" des tableaux.
J'ai simplifié RP Niemeyer version jsfiddle à faire de même, sans l'aide de la fonction distincte. Veuillez consulter ici: jsfiddle
Grâce Niemeyer.
Veux juste ajouter à cela que si vous appelez cette
.distinct()
méthode deux fois (comme peut-être calculée à partir d'un observable), vous obtiendrez les indices et les associés calculé en fonction appelée deux fois - rincer et répéter et que vous avez un problème de performance sur vos mains.Pour trier, ajouter cette ligne dans le haut de la fonction: