Ich baue Funktionen auf eine Webseite, die der Benutzer mehrmals ausführen kann. Durch die Aktion des Benutzers wird ein Objekt / Modell erstellt und mit ko.applyBindings () auf HTML angewendet.
Der datengebundene HTML-Code 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.
- Ein Javascript-Fehler tritt in Bezug auf eine der Eigenschaften im Objekt / Modell auf, obwohl er immer noch im Markup gerendert wird.
Um dieses Problem zu umgehen, rufe ich nach dem ersten Durchgang jempty .empty () auf, um das HTML-Vorlagen 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 neu gebunden wird, enthält er immer noch Daten vom ersten Objekt / Modell, und ich erhalte immer noch 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 einem Mittel, um 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 Prozess 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. Anschließend wird das JSON-Objektmodell mithilfe von an diesen HTML-Code gebunden
mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);
Sobald der Benutzer einige Auswahlen 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
mn.AccountCreationModel = null;
Wenn der Benutzer dies noch einmal tun möchte, werden alle diese Schritte wiederholt.
Ich fürchte, der Code ist zu "involviert", um eine jsFiddle-Demo zu erstellen.
init
Funktion verfügbar machen , in der Sie die anzuwendenden Daten übergeben?