Wie lösche / entferne ich sichtbare Bindungen in Knockout.js?

Ich baue Funktionen auf eine Webseite auf, die der Benutzer mehrmals ausführen kann. Durch die Aktion des Benutzers wird ein Objekt / Modell erstellt und mit ko.applyBindings () auf HTML angewendet.

Das datengebundene HTML wird über jQuery-Vorlagen erstellt.

So weit, ist es gut.

Wenn ich diesen Schritt wiederhole, indem ich ein zweites Objekt / Modell erstelle und ko.applyBindings () aufrufe, treten zwei Probleme auf:

Das Markup zeigt das vorherige Objekt / Modell sowie das neue Objekt / Modell.Es tritt ein Javascript-Fehler in Bezug auf eine der Eigenschaften im Objekt / Modell auf, obwohl dieser weiterhin im Markup gerendert wird.

Um dieses Problem zu umgehen, rufe ich nach dem ersten Durchgang jQueries .empty () auf, um das HTML-Template zu entfernen, das alle Datenbindungsattribute enthält, sodass es nicht mehr im DOM enthalten ist. Wenn der Benutzer den Prozess für den zweiten Durchgang startet, wird der datengebundene HTML-Code erneut zum DOM hinzugefügt.

Aber wie gesagt, wenn der HTML-Code erneut zum DOM hinzugefügt und an das neue Objekt / Modell gebunden wird, enthält er weiterhin Daten vom ersten Objekt / Modell, und ich erhalte weiterhin den JS-Fehler, der nicht auftritt während des ersten Durchgangs.

Die Schlussfolgerung scheint zu sein, dass Knockout an diesen gebundenen Eigenschaften festhält, obwohl das Markup aus dem DOM entfernt wurde.

Ich suche also nach einer Möglichkeit, diese gebundenen Eigenschaften aus Knockout zu entfernen. Knockout sagen, dass es kein beobachtbares Modell mehr gibt. Gibt es eine Möglichkeit, dies zu tun?

BEARBEITEN

Der grundlegende Vorgang besteht darin, dass der Benutzer eine Datei hochlädt. Der Server antwortet dann mit einem JSON-Objekt, der datengebundene HTML-Code wird dem DOM hinzugefügt, und das JSON-Objektmodell wird mithilfe von an diesen HTML-Code gebunden

<code>mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);
</code>

Nachdem der Benutzer eine Auswahl für das Modell getroffen hat, wird dasselbe Objekt auf den Server zurückgesendet, der datengebundene HTML-Code wird aus dem DOM entfernt, und ich habe dann das folgende JS

<code>mn.AccountCreationModel = null;
</code>

Wenn der Benutzer dies noch einmal möchte, werden alle diese Schritte wiederholt.

Ich fürchte, der Code ist zu "involviert", um eine jsFiddle-Demo zu machen.

Antworten auf die Frage(9)

Ihre Antwort auf die Frage