javascript - 如何清除/删除 Knockout.js 中的可观察绑定(bind)?

标签 javascript knockout.js

我正在将功能构建到用户可以多次执行的网页上。通过用户的操作,对象/模型被创建并使用 ko.applyBindings() 应用于 HTML。

数据绑定(bind) HTML 是通过 jQuery 模板创建的。

到目前为止一切顺利。

当我通过创建第二个对象/模型并调用 ko.applyBindings() 来重复此步骤时,我遇到了两个问题:

  1. 标记显示以前的对象/模型以及新的对象/模型。
  2. 发生了与对象/模型中的某个属性相关的 javascript 错误,尽管它仍在标记中呈现。

为了解决这个问题,在第一遍之后,我调用了 jQuery 的 .empty() 来删除包含所有数据绑定(bind)属性的模板化 HTML,这样它就不再存在于 DOM 中。当用户开始第二遍的过程时,数据绑定(bind)的 HTML 被重新添加到 DOM。

但是就像我说的,当 HTML 被重新添加到 DOM 并重新绑定(bind)到新的对象/模型时,它仍然包含来自第一个对象/模型的数据,我仍然得到 JS 错误'发生在第一遍期间。

结论似乎是 Knockout 保留了这些绑定(bind)属性,即使标记已从 DOM 中删除。

所以我正在寻找一种从 Knockout 中删除这些绑定(bind)属性的方法;告诉 knockout 不再有可观察的模型。有办法做到这一点吗?

编辑

基本流程是用户上传一个文件;然后服务器响应一个 JSON 对象,数据绑定(bind)的 HTML 被添加到 DOM,然后 JSON 对象模型被绑定(bind)到这个 HTML 使用

mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);

一旦用户在模型上做了一些选择,相同的对象被回发到服务器,数据绑定(bind)的 HTML 从 DOM 中移除,然后我有以下 JS

mn.AccountCreationModel = null;

当用户希望再次执行此操作时,将重复所有这些步骤。

恐怕代码太“复杂”,无法进行 jsFiddle 演示。

最佳答案

您是否尝试过在 DOM 元素上调用 knockout 的 clean node 方法来处理内存绑定(bind)对象?

var element = $('#elementId')[0]; 
ko.cleanNode(element);

然后在新 View 模型的那个元素上再次应用 knockout 绑定(bind)将更新您的 View 绑定(bind)。

关于javascript - 如何清除/删除 Knockout.js 中的可观察绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10048485/

相关文章:

javascript - 在codeigniter中使用ajax添加数据后更新select

javascript - PHP 与除 Apache 之外运行的 Node.js (Socket.io) 进行通信

knockout.js - knockout observableArray 不更新

html - knockout 绑定(bind)弄乱了单选按钮的格式

javascript - React Native FlatList 在添加新数据时重新渲染已经渲染的项目

php - 连接到 Flash Socket 时排队的 Ajax 调用

javascript - 按下按钮时自动验证

javascript - KnockoutJS - 以设定的时间间隔重新计算计算值

javascript - 在样式化组件按钮上使用 onClick 函数在第二次单击之前不会更改状态(添加了沙箱 URL)

mapping - knockout 映射导致堆栈溢出