1
我正在处理控制面板应用程序,每个工具都加载自己的Javascript文件,其中大部分都包含一些Knockout绑定。 Knockout本身被加载到文档头中,但工具被异步加载到#body div中,所以我担心元素会继续被绑定,即使加载了不同的工具。我认为这会导致内存泄漏,并可能会出现一些故障,如果相同的元素绑定多次。在加载新工具之前,是否可以一次清除所有Knockout绑定?在Knockout中清除所有可观察的绑定
我正在处理控制面板应用程序,每个工具都加载自己的Javascript文件,其中大部分都包含一些Knockout绑定。 Knockout本身被加载到文档头中,但工具被异步加载到#body div中,所以我担心元素会继续被绑定,即使加载了不同的工具。我认为这会导致内存泄漏,并可能会出现一些故障,如果相同的元素绑定多次。在加载新工具之前,是否可以一次清除所有Knockout绑定?在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
observable时,它将呈现元素的副本并绑定内容。
当您更改currentTool
时,KO将清理现有的绑定和元素,并呈现/绑定元素的新副本。
因此,您只需拨打ko.applyBindings
一次,并根据您要显示的内容继续更新currentTool
。
听起来很有希望,但我遇到了一些麻烦。你会碰巧知道这种模式的一个工作示例吗?顺便说一句,谢谢你的回应。 – dlwiest
这将是基本思路:http://jsfiddle.net/rniemeyer/KB8aJ/ –
因此,当我做var ViewModel = {etc},这将清除任何以前与ViewModel相关联的绑定? – dlwiest