我正在使用淘汰赛,它是foreach绑定,用于将表行绑定到表中。我不更新UI来添加或删除行,这都是通过剔除完成的。我还使用提示js库向这些行添加工具提示。问题是我没有为带尖头的js引用typescript或typescript d.ts定义中的行。我使用了这段丑陋的代码。
setInterval(function () {
Tipped.create('.tipped'); // create tooltips and listeners
$(".tipped").removeClass("tipped"); // don't attach twice
}, 500);
这样只会添加一次事件,以后再跳过它们。
问题是,尽管删除行时删除键会删除它自己的绑定,但提示不会删除。这导致内存泄漏,因为越来越多的事件侦听器将用于页面上不再存在的元素。他们永远不会被垃圾收集。
解决方案将是自定义的foreach绑定,该绑定添加和删除我的提示吗?
最佳答案
我不知道它是否漂亮,但是可以解决我的泄漏问题
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)