清除Knockout中的所有可观察对象绑定

Clearing all observable bindings in Knockout

本文关键字:观察 对象 绑定 Knockout 清除      更新时间:2023-09-26

我现在正在开发一个控制面板应用程序,其中每个工具都加载自己的Javascript文件,其中大多数都包含一些Knockout绑定。Knockout本身被加载到文档头部,但是工具被异步加载到#bodydiv中,所以我担心的是元素将继续被绑定,即使在加载了不同的工具之后。我认为,如果多次绑定相同的元素,这将导致内存泄漏和可能出现的一些故障。在我加载新工具之前,是否有可能立即清除所有Knockout绑定?

我推荐的一般模式是:

//obviously doesn't have to be an object literal
var viewModel = {
  currentTool: ko.observable()
};
ko.applyBindings(viewModel);

然后,像这样绑定页面:

<div data-bind="with: currentTool">
     ...content here
</div>

现在,当页面最初被绑定时,该区域将不会被渲染,因为currentTool是未定义的,但是KO将复制子区域作为"模板"使用。

当您填充currentTool可观察对象时,它将呈现元素的副本并绑定内容。

当你改变currentTool时,KO将清理现有的绑定和元素,并渲染/绑定元素的新副本。

因此,您只调用ko.applyBindings一次,并根据要显示的内容继续更新currentTool