我正在使用淘汰赛,它是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)

07-24 15:05