Wie man mit Knockout.js an einer bestimmten Position ein Element in ein ObservableArray hinzufügt/einfügt

Lesezeit: 2 Minuten

Alle Knockout-Beispiele, die ich gefunden habe, scheinen ein neues Element am Ende eines ObservableArray hinzuzufügen, indem etwa Folgendes verwendet wird:

viewModel.SomeItems.push(someNewItem);

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

Wie füge ich dem ObservableArray an einer bestimmten Position ein Element hinzu?

z.B. etwas wie:

viewModel.SomeItems.push(someNewItem, indexToInsertItAt);

Benutzer-Avatar
ipr101

Sie sollten in der Lage sein, das native JavaScript zu verwenden splice Methode –

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

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

Beispiel hier (nicht Knockout-spezifisch) – Wie fügt man ein Element an einem bestimmten Index in ein Array ein?

Aus den Knockout-Dokumenten –

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

  • Vielen Dank. Spleißen hat funktioniert. Für Knockout-Benutzer ist ko.utils.arrayIndexOf auch nützlich, wenn Sie den Index finden möchten, um Ihr neues Element basierend auf einem vorhandenen Element einzufügen.

    – Mark Robinson

    6. September 2011 um 11:26 Uhr

  • Dies funktioniert nicht mit Sparse-Arrays, zumindest nicht für mich in Chrom. Siehe meine Antwort unten

    – Adam Tegen

    4. September 2012 um 5:47 Uhr

Benutzer-Avatar
Travis Cavanaugh

Für Knockout-Einsatz

viewModel.SomeItems.unshift(someNewItem);

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

  • Dies fügt das Element am Anfang des Arrays ein, hilft also nicht, wenn Sie irgendwo in der Mitte ein Element einfügen möchten.

    – Mark Robinson

    3. August 2012 um 8:03 Uhr

  • Irgendwie habe ich den Teil über das Einfügen irgendwo im Array verpasst. Ja, das funktioniert nur, wenn Sie am Anfang einfügen möchten. Das tut mir leid.

    – Travis Cavanaugh

    1. Oktober 2012 um 20:47 Uhr

Ich habe diese Erweiterungsfunktion erstellt, die für mich gut funktioniert hat. Splice funktionierte bei mir nicht, wenn ich am Ende eines spärlichen Arrays etwas hinzufügte.

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

Das funktioniert sogar mit:

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

  • Und wenn Sie statt setAt insertAt machen wollen, schalten Sie einfach um this()[index] = value; zu this.splice(index, 0, value);. Danke Adam!

    – Brian S

    22. September 2012 um 13:47 Uhr


1093290cookie-checkWie man mit Knockout.js an einer bestimmten Position ein Element in ein ObservableArray hinzufügt/einfügt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy