Я создаю функциональность на веб-странице, которую пользователь может выполнять несколько раз. В результате действия пользователя объект / модель создается и применяется к 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.
init
функцию, в которой вы передаете данные для применения?