web-dev-qa-db-fra.com

Comment ajouter / insérer un élément dans un ObservableArray à une certaine position avec Knockout.js

Tous les exemples de knockout que j'ai trouvés semblent ajouter un nouvel élément à la fin d'un ObservableArray en utilisant quelque chose comme:

viewModel.SomeItems.Push(someNewItem);

Bien sûr, cela place l'élément à la fin du tableau.

Comment ajouter un élément au ObservableArray à une certaine position?

par exemple. quelque chose comme:

viewModel.SomeItems.Push(someNewItem, indexToInsertItAt);
73
Mark Robinson

Vous devriez pouvoir utiliser la méthode JavaScript splice native -

viewModel.SomeItems.splice(2,0,someNewItem);

Documents ici - https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice

Exemple ici (non spécifique à Knockout) - Comment insérer un élément dans un tableau à un index spécifique?

Depuis les documents Knockout -

Pour les fonctions qui modifient le contenu du tableau, telles que Push et splice, les méthodes de KO déclenchent automatiquement le mécanisme de suivi des dépendances afin que tous les écouteurs enregistrés soient informés de la modification et que votre interface utilisateur soit automatiquement mise à jour.

82
ipr101

Pour une utilisation par élimination directe

viewModel.SomeItems.unshift(someNewItem);

Voir aussi: http://knockoutjs.com/documentation/observableArrays.html

22
Travis Cavanaugh

J'ai fait cette fonction d'extension qui fonctionnait bien pour moi. Splice ne fonctionnait pas pour moi si j'ajoutais à la fin d'un tableau clairsemé.

ko.observableArray.fn.setAt = function(index, value) {
    this.valueWillMutate();
    this()[index] = value;
    this.valueHasMutated();
}

Cela fonctionne même avec:

var a = ko.observableArray(['a', 'b', 'c']);
a.setAt(42, 'the answer');
12
Adam Tegen