我有一个自定义绑定,用于初始化一个在删除绑定元素后需要销毁的对象。
我能想到的唯一选择是检测元素何时消失然后销毁对象,但我仍然没有找到方法来做到这一点。
答案 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.