是否有可能为淘汰自定义绑定提供析构函数逻辑?

时间:2013-11-25 19:33:45

标签: knockout.js

我有一个自定义绑定,用于初始化一个在删除绑定元素后需要销毁的对象。

我能想到的唯一选择是检测元素何时消失然后销毁对象,但我仍然没有找到方法来做到这一点。

2 个答案:

答案 0 :(得分:3)

Knockout有一个custom disposal回调你可以打电话。来自their page的示例。

ko.bindingHandlers.myWidget = {
    init: function(element, valueAccessor) {
        var options = ko.unwrap(valueAccessor()),
            $el = $(element);
 
        $el.myWidget(options);
 
        ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
            // This will be called when the element is removed by Knockout or
            // if some other part of your code calls ko.removeNode(element)
            $el.myWidget("destroy");
        });
    }
};

答案 1 :(得分:0)

也许在disposeWhenNodeIsRemoved中使用init

  

disposeWhenNodeIsRemoved选项确保计算此值   如果Knockout移除我们的元素,observable将被销毁,就像在   一个模板场景。

代码示例:

ko.bindingHandlers.isolatedOptions = {
    init: function(element, valueAccessor) {
        var args = arguments;
        ko.computed({
            read:  function() {
               ko.utils.unwrapObservable(valueAccessor());
               ko.bindingHandlers.options.update.apply(this, args);
            },
            owner: this,
            disposeWhenNodeIsRemoved: element
        });
    }
};

来源:Knockout.js Performance Gotcha #3 - All Bindings Fire Together.