Jak wyczyścić / usunąć obserwowalne powiązania w Knockout.js?
Buduję funkcjonalność na stronie internetowej, którą użytkownik może wykonywać wielokrotnie. Dzięki akcji użytkownika tworzony jest obiekt / model i stosowany do HTML przy użyciu ko.applyBindings ().
HTML związany z danymi jest tworzony za pomocą szablonów jQuery.
Jak na razie dobrze.
Kiedy powtarzam ten krok, tworząc drugi obiekt / model i wywołując ko.applyBindings (), napotykam dwa problemy:
Znacznik pokazuje poprzedni obiekt / model, a także nowy obiekt / model.Występuje błąd javascript związany z jedną z właściwości obiektu / modelu, mimo że nadal jest renderowany w języku znaczników.Aby obejść ten problem, po pierwszym przejściu wywołuję plik .empty () jQuery, aby usunąć szablon HTML, który zawiera wszystkie atrybuty powiązania danych, dzięki czemu nie ma go już w DOM. Gdy użytkownik rozpoczyna proces drugiego przejścia, HTML związany z danymi jest ponownie dodawany do DOM.
Ale tak jak powiedziałem, kiedy HTML zostanie ponownie dodany do DOM i ponownie powiązany z nowym obiektem / modelem, nadal zawiera dane z pierwszego obiektu / modelu, a ja wciąż otrzymuję błąd JS, który nie występuje podczas pierwszego przejazdu.
Wniosek wydaje się być taki, że Knockout trzyma się tych powiązanych właściwości, nawet jeśli znaczniki są usuwane z DOM.
Więc czego szukam, to sposób na usunięcie tych związanych właściwości z Knockout; mówiący nokaut, że nie ma już obserwowalnego modelu. Czy istnieje sposób, aby to zrobić?
EDYTOWAĆ
Podstawowy proces polega na tym, że użytkownik przesyła plik; serwer następnie odpowiada obiektem JSON, HTML związany z danymi jest dodawany do DOM, a następnie model obiektu JSON jest powiązany z tym HTML przy użyciu
<code>mn.AccountCreationModel = new AccountViewModel(jsonData.Account); ko.applyBindings(mn.AccountCreationModel); </code>
Gdy użytkownik dokona pewnych wyborów na modelu, ten sam obiekt zostanie wysłany z powrotem do serwera, HTML związany z danymi zostanie usunięty z DOM i wtedy mam następujący JS
<code>mn.AccountCreationModel = null; </code>
Gdy użytkownik chce to zrobić jeszcze raz, wszystkie te kroki są powtarzane.
Obawiam się, że kod jest zbyt „zaangażowany”, by zrobić demo jsFiddle.