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

时间:2013-04-03 16:44:53

标签: javascript knockout.js

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

1 个答案:

答案 0 :(得分:3)

我建议的一般模式是:

//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 observable时,它将呈现元素的副本并绑定内容。

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

因此,您只需拨打ko.applyBindings一次,然后根据您要显示的内容继续更新currentTool