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