我在我的代码中使用KnockoutObservables,这些代码不是viewModel的一部分,只是因为我喜欢侦听它们的状态的能力。
但是,当我释放与它们相关的HtmlElement时,我需要释放它们(我假设)来清除内存。
ko.cleanNode假设清除来自data-bind中节点的订阅,这与我所拥有的不完全相同。
<div id="foo" data-bind="myCustomBinding: foo"></div>自订装订:
ko.bindingHandlers.myCustomBinding = {
init: function (element: any, valueAccessor: () => any, allBindingsAccessor: () => any, viewModel: any, bindingContext: KnockoutBindingContext) {
new FooClass($(element), valueAccessor());
}
}然后,MyFooClass将根据需要显示,并将许多新的KnockoutObservables创建为公共属性。我创建的其他对象可以使用这些。我假设ko.cleanNode没有处理这个问题,那么我如何清理它们呢?
class FooClass {
disposed: boolean = false;
myInternalObservable: KnockoutObservable<any> = ko.observable("test");
constructor(public htmlElement: JQuery, public value: KnockoutObservable<any>) {
// Processing
}
dispose(): void {
if (this.disposed) {
return;
}
// Do other disposing, unbind events, delete data
// Dispose the ko?
this.disposed = true;
}
}谢谢
发布于 2013-09-03 11:36:12
您可以使用的一件事是ko.utils.domNodeDisposal.addDisposeCallback(element, cleanUpFunction)。这允许您在Knockout移除元素时执行代码(比如模板化或控制流绑定)。此时,淘汰赛将调用ko.cleanNode作为ko.removeNode的一部分,因此它允许您进行任何额外的清理。您可以选择在计算可观察性上调用dispose,并销毁您在自定义绑定中所做的任何小部件或其他事情。
https://stackoverflow.com/questions/18587973
复制相似问题