73 votes

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

Tous les exemples de knock-out 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);
 

Cela place bien sûr l’élément à la fin du tableau.

Comment ajouter un élément à ObservableArray à une position donnée?

par exemple. quelque chose comme:

 viewModel.SomeItems.push(someNewItem, indexToInsertItAt);
 

82voto

ipr101 Points 15337

Vous devriez être en mesure d'utiliser le JavaScript natif splice méthode

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

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

Exemple ici (pas de knock-out spécifique) - Javascript - Insérer un Élément dans un Tableau à un Indice Spécifique

À partir du knock-out docs -

Pour les fonctions qui modifient le contenu de la matrice, tels que les push et splice, KO méthodes de déclencher automatiquement le suivi des dépendances mécanisme de sorte que tous les écouteurs enregistrés sont informés du changement, et votre INTERFACE utilisateur est automatiquement mis à jour.

23voto

TravCav Points 129

Pour une utilisation KO

 viewModel.SomeItems.unshift(someNewItem);
 

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

12voto

Adam Tegen Points 8563

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

 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');
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X