我正在将功能构建到用户可以多次执行的网页上。通过用户的操作,一个对象/模型被创建并使用 ko.applyBindings() 应用到 HTML。
数据绑定的 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 演示。