Buduję funkcjonalność na stronie internetowej, którą użytkownik może wykonywać wielokrotnie. W wyniku działania użytkownika obiekt / model jest tworzony i stosowany do HTML za pomocą ko.applyBindings ().
Powiązany z danymi kod HTML jest tworzony za pomocą szablonów jQuery.
Na razie w porządku.
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 dotyczący jednej z właściwości w obiekcie / modelu, mimo że jest nadal renderowany w znaczniku.
Aby obejść ten problem, po pierwszym przejściu wywołuję .empty () jQuery, aby usunąć szablon HTML zawierający wszystkie atrybuty wiązania danych, tak aby nie był już w DOM. Gdy użytkownik rozpoczyna proces dla drugiego przebiegu, związany z danymi kod HTML jest ponownie dodawany do DOM.
Ale tak jak powiedziałem, kiedy kod HTML jest ponownie dodawany do DOM i ponownie powiązany z nowym obiektem / modelem, nadal zawiera dane z pierwszego obiektu / modelu i nadal otrzymuję błąd JS, który nie występuje podczas pierwszego przejazdu.
Wniosek wydaje się być taki, że Knockout zachowuje te powiązane właściwości, mimo że znaczniki są usuwane z DOM.
Więc to, czego szukam, to sposób na usunięcie tych powiązanych właściwości z Knockout; mówiąc nokaut, że nie ma już obserwowalnego modelu. Czy jest na to sposób?
EDYTOWAĆ
Podstawowy proces polega na tym, że użytkownik przesyła plik; serwer odpowiada następnie obiektem JSON, kod HTML powiązany z danymi jest dodawany do DOM, a następnie model obiektowy JSON jest powiązany z tym kodem HTML za pomocą
mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);
Gdy użytkownik dokona pewnych wyborów w modelu, ten sam obiekt jest wysyłany z powrotem na serwer, kod HTML powiązany z danymi jest usuwany z DOM, a następnie mam następujący kod JS
mn.AccountCreationModel = null;
Gdy użytkownik chce to zrobić jeszcze raz, wszystkie te kroki są powtarzane.
Obawiam się, że kod jest zbyt „zaangażowany”, aby wykonać demo jsFiddle.
initfunkcji, w której przekazujesz dane do zastosowania?