Я создаю функциональность на веб-странице, которую пользователь может выполнять несколько раз. Через действие пользователя объект/модель создается и применяется к HTML с помощью ko.applyBindings().
HTML, связанный с данными, создается с помощью шаблонов jQuery.
Пока все хорошо.
Когда я повторяю этот шаг, создавая второй объект/модель и вызываю ko.applyBindings(), я сталкиваюсь с двумя проблемами:
- Разметка показывает предыдущий объект/модель, а также новый объект/модель.
- Возникает ошибка javascript, относящаяся к одному из свойств объекта/модели, хотя она все еще отображается в разметке.
Чтобы обойти эту проблему, после первого прохода я вызываю jQuery.empty() для удаления шаблона HTML, который содержит все атрибуты привязки данных, так что он больше не находится в DOM. Когда пользователь запускает процесс для второго прохода, связанный с данными HTML снова добавляется в DOM.
Но, как я уже сказал, когда HTML снова добавляется в DOM и повторно привязывается к новому объекту/модели, он по-прежнему включает данные из первого объекта/модели, и я все еще получаю ошибку JS, которая не работает во время первого прохода.
Как представляется, вывод состоит в том, что Knockout поддерживает эти связанные свойства, даже если разметка удалена из DOM.
Итак, я ищу средство для удаления этих связанных свойств из Knockout; говорящий нокаутом, что уже нет наблюдаемой модели. Есть ли способ сделать это?
ИЗМЕНИТЬ
Основной процесс заключается в том, что пользователь загружает файл; сервер затем отвечает с помощью объекта JSON, связанный с данными HTML добавляется в DOM, тогда объектная модель JSON привязана к этому HTML с помощью
mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);
После того, как пользователь сделал некоторые варианты в модели, тот же объект отправляется обратно на сервер, HTML-код, связанный с данными, удаляется из DOM, и тогда у меня есть следующий JS
mn.AccountCreationModel = null;
Когда пользователь хочет сделать это еще раз, все эти шаги повторяются.
Я боюсь, что код слишком "задействован" для демонстрации jsFiddle.