首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清理KnockoutObservables

清理KnockoutObservables
EN

Stack Overflow用户
提问于 2013-09-03 08:55:22
回答 1查看 382关注 0票数 0

我在我的代码中使用KnockoutObservables,这些代码不是viewModel的一部分,只是因为我喜欢侦听它们的状态的能力。

但是,当我释放与它们相关的HtmlElement时,我需要释放它们(我假设)来清除内存。

ko.cleanNode假设清除来自data-bind中节点的订阅,这与我所拥有的不完全相同。

代码语言:javascript
复制
<div id="foo" data-bind="myCustomBinding: foo"></div>

自订装订:

代码语言:javascript
复制
ko.bindingHandlers.myCustomBinding = {
    init: function (element: any, valueAccessor: () => any, allBindingsAccessor: () => any, viewModel: any, bindingContext: KnockoutBindingContext) {
        new FooClass($(element), valueAccessor());
    }
}

然后,MyFooClass将根据需要显示,并将许多新的KnockoutObservables创建为公共属性。我创建的其他对象可以使用这些。我假设ko.cleanNode没有处理这个问题,那么我如何清理它们呢?

代码语言:javascript
复制
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;
    }
}

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-03 11:36:12

您可以使用的一件事是ko.utils.domNodeDisposal.addDisposeCallback(element, cleanUpFunction)。这允许您在Knockout移除元素时执行代码(比如模板化或控制流绑定)。此时,淘汰赛将调用ko.cleanNode作为ko.removeNode的一部分,因此它允许您进行任何额外的清理。您可以选择在计算可观察性上调用dispose,并销毁您在自定义绑定中所做的任何小部件或其他事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18587973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档