Knockout - Das Löschen eines Elements aus ViewModel wird nicht aus dem DOM entfernt

8

Ich habe ein Ansichtsmodell, das eine Sammlung von Objekten enthält, "Dateien".

Offensichtlich ist dies an das DOM gebunden.

Wenn ich ein Objekt aus der Sammlung "Dateien" entferne, würde ich erwarten, dass das DOM entsprechend aktualisiert wird, aber es wird nicht aktualisiert.

Dies ist der JS, den ich zum Entfernen eines Objekts aus der Sammlung "Dateien" verwende.

%Vor%

Wenn ich die Länge der Sammlung nach dem Aufrufen von Delete (id) in der Konsole ausdrucke, kann ich sehen, dass ein Element entfernt wurde.

Warum wird das DOM nicht aktualisiert?

Wenn ich ko.applyBindings anrufe (... dann wird aktualisiert, aber mein Verständnis ist, dass ich das nicht jedes Mal aufrufen muss, wenn das Ansichtsmodell aktualisiert wird.

Also, was könnte ich falsch machen?

Ich habe es auch mit Files als observableArray und einem Standardarray ausprobiert, ohne Unterschied.

UPDATE: Hier ist die Definition des View-Modells (naja ... der relevante Teil sowieso)

%Vor%

Ich habe es auch mit

probiert %Vor%

und dann jede Instanz von Files () in nur Dateien ändern. Kein Unterschied.

    
awj 30.04.2013, 15:31
quelle

1 Antwort

8

Sie müssen das beobachtbare Array haben:

%Vor%

Sie müssen jedoch splice direkt auf dem beobachtbaren Array mit this.Files.splice :

aufrufen %Vor%

Andernfalls entfernen Sie das Element aus dem zugrunde liegenden Array, ohne dass KO von der Entfernung weiß, sodass das DOM nicht aktualisiert werden kann. Siehe auch die Dokumentation Manipulieren eines ObservableArray -Abschnitts.

Übrigens hat das ObservableArray eine remove -Funktion, die Ihren Code erheblich vereinfachen könnte:

%Vor%     
nemesv 30.04.2013, 15:43
quelle

Tags und Links