J'ai un tableau observable dans Knockout d'objets de personnes. Je voulais être en mesure de trier la liste des personnes en fonction du nom de famille. Le problème est que la liste contient un certain nombre de noms de famille en double. Le résultat est que lorsqu'il y a plus d'un nom de famille, les prénoms apparaissent tels qu'ils ont été trouvés. J'aimerais pouvoir trier le tableau par nom de famille et, lorsqu'il y a plus d'un nom de famille, le trier également par prénom. J'utilise une entrée de texte pour que l'utilisateur commence à taper le nom de famille. Les résultats sont liés à un modèle qui affiche toutes les correspondances.
<input data-bind="value: filter, valueUpdate: 'afterkeydown'">
Et voici mon code de filtre de tableau Knockout :
function Item(firstname, lastname) {
this.firstname = ko.observable(firstname);
this.lastname = ko.observable(lastname);
}
var playersViewModel = {
items: ko.observableArray([]),
filter: ko.observable("")
};
var players;
$(function() {
playersViewModel.filteredItems = ko.computed(function() {
var filter = this.filter().toLowerCase();
if (!filter) {
return this.items();
} else {
return ko.utils.arrayFilter(this.items(), function(item) {
return ko.utils.stringStartsWith(item.lastname().toLowerCase(), filter);
});
}
}, playersViewModel);
$.getJSON('./players.json', function(data) {
players = data.players;
playersViewModel.players = ko.observableArray(players);
ko.applyBindings(playersViewModel);
var mappedData = ko.utils.arrayMap(players, function(item) {
return new Item(item.firstname,item.lastname);
});
playersViewModel.items(mappedData);
});
});
Pour le filtrage des noms de famille, cela fonctionne bien, mais je ne parviens pas à trouver un moyen d'ajouter le tri du prénom lorsqu'il y a des noms de famille en double. Par exemple, dans mon tableau, lorsque le tri est effectué par nom de famille, j'obtiens :
Joe Bailey
Jack Brown
Adam Brown
Bob Brown
Jim Byrd
J'aimerais que les noms de famille en double soient également triés par prénom :
Joe Bailey
Adam Brown
Bob Brown
Jack Brown
Jim Byrd