我正在使用knockout,它是foreach绑定将表行绑定到表中。我没有更新UI来添加或删除行,这些都是由淘汰完成的。我也使用tipped js库向这些行添加工具提示。问题是我没有引用tipped js的typescript或typescript d.ts定义中的行。我得到了这个丑陋的代码。
setInterval(function () {
Tipped.create('.tipped'); // create tooltips and listeners
$(".tipped").removeClass("tipped"); // don't attach twice
}, 500);
这只会添加一次事件,然后再将其跳过。
问题在于,虽然在删除行时,knockout会删除它自己的绑定,但tipped却没有。这会导致内存泄漏,因为越来越多的事件侦听器留给页面上不再存在的元素。它们永远不会被垃圾收集。
该解决方案是否是一个自定义的foreach绑定,可以添加和删除我的tipped?
答案 0 :(得分:0)
我不知道它是否漂亮,但它可以修复我的泄漏
setInterval(function () {
Tipped.create('.tipped');
$(".tipped").bind('destroyed', function () {
Tipped.remove($(this));
});
$(".tipped").removeClass("tipped");
}, 500);
(function ($) {
$.event.special.destroyed = {
remove: function (o) {
if (o.handler) {
o.handler.apply(this, arguments);
}
}
}
})(jQuery)