2013-04-03 38 views
1

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

回答

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

+0

听起来很有希望,但我遇到了一些麻烦。你会碰巧知道这种模式的一个工作示例吗?顺便说一句,谢谢你的回应。 – dlwiest

+1

这将是基本思路:http://jsfiddle.net/rniemeyer/KB8aJ/ –

+0

因此,当我做var ViewModel = {etc},这将清除任何以前与ViewModel相关联的绑定? – dlwiest

相关问题