web-dev-qa-db-de.com

Hinzufügen / Einfügen eines Elements in ein ObservableArray an einer bestimmten Position mit Knockout.js

Alle gefundenen Knockout-Beispiele scheinen dem Ende eines ObservableArray ein neues Element hinzuzufügen, das etwa Folgendes enthält:

viewModel.SomeItems.Push(someNewItem);

Dadurch wird das Element natürlich am Ende des Arrays platziert.

Wie füge ich ein Objekt an einer bestimmten Position zum ObservableArray hinzu?

z.B. etwas wie:

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

Sie sollten in der Lage sein, die native JavaScript splice -Methode zu verwenden -

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

Dokumente hier - https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice

Beispiel hier (nicht Knockout-spezifisch) - Einfügen eines Elements in ein Array an einem bestimmten Index?

Aus den Knockout-Dokumenten -

Bei Funktionen, die den Inhalt des Arrays ändern, z. B. Push und Splice, lösen die KO-Methoden automatisch den Abhängigkeitsverfolgungsmechanismus aus, sodass alle registrierten Listener über die Änderung informiert werden und Ihre Benutzeroberfläche automatisch aktualisiert wird.

82
ipr101

Zum Aussparen verwenden

viewModel.SomeItems.unshift(someNewItem);

Siehe auch: http://knockoutjs.com/documentation/observableArrays.html

22

Ich habe diese Erweiterungsfunktion gemacht, die gut für mich funktioniert hat. Splice funktionierte nicht für mich, wenn ich das Ende eines spärlichen Arrays hinzufügte.

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

Dies funktioniert sogar mit:

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