Я будую функціональність на веб-сторінці, яку користувач може виконувати кілька разів. За допомогою дії користувача об’єкт / модель створюється та застосовується до HTML за допомогою ko.applyBindings ().
Обмежений даними HTML створюється за допомогою шаблонів jQuery.
Все йде нормально.
Коли я повторюю цей крок, створюючи другий об'єкт / модель і викликаю ko.applyBindings (), у мене виникають дві проблеми:
- Розмітка показує попередній об'єкт / модель, а також новий об'єкт / модель.
- Відбувається помилка javascript, що стосується одного з властивостей об'єкта / моделі, хоча він все ще відображається в розмітці.
Щоб вирішити цю проблему, після першого проходу я закликаю jQuery's .empty (), щоб видалити шаблонний HTML, який містить усі атрибути прив'язки даних, так що він більше не знаходиться в DOM. Коли користувач запускає процес другого проходу, пов'язаний з даними HTML знову додається до DOM.
Але, як я вже говорив, коли HTML знову додається до DOM і знову прив'язується до нового об'єкта / моделі, він все ще включає дані першого об'єкта / моделі, і я все одно отримую помилку JS, яка не виникає під час першого проходу.
Здається висновок, що нокаут тримається за ці зв'язані властивості, навіть якщо розмітка видалена з DOM.
Тож те, що я шукаю, - це засіб видалити ці пов'язані властивості з нокауту; кажучи нокаутом, що моделі більше не спостерігається. Чи є спосіб це зробити?
EDIT
Основний процес полягає в тому, що користувач завантажує файл; сервер потім відповідає об'єктом JSON, пов'язаний з даними HTML додається до DOM, тоді об'єктна модель JSON пов'язана з цим HTML за допомогою
mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);
Після того, як користувач здійснив кілька виборів на моделі, той самий об'єкт буде розміщений назад на сервері, пов'язаний з даними HTML видаляється з цього пункту DOM, і я отримую наступний JS
mn.AccountCreationModel = null;
Коли користувач бажає зробити це ще раз, всі ці дії повторюються.
Я боюся, що код занадто "задіяний", щоб зробити демо jsFiddle.
initфункцію, в якій ви передаєте дані для застосування?