【问题标题】:Memory leak caused by event listeners attached to knockout removed dom elements由附加到剔除删除的 dom 元素的事件侦听器引起的内存泄漏
【发布时间】:2014-08-21 20:52:18
【问题描述】:

我正在使用淘汰赛,它是 foreach 绑定将表行绑定到表中。我不会更新 UI 来添加或删除行,这一切都是通过淘汰赛完成的。我还使用提示的 js 库向这些行添加工具提示。问题是我没有引用 typescript 或 typescript d.ts 定义中用于提示 js 的行。我让它与这段丑陋的代码一起工作。

setInterval(function () {
    Tipped.create('.tipped'); // create tooltips and listeners
    $(".tipped").removeClass("tipped"); // don't attach twice
}, 500);

这将只添加一次事件,然后在以后跳过它们。

问题在于,虽然敲除在删除一行时会删除它自己的绑定,但小费不会。这会导致内存泄漏,因为越来越多的事件侦听器留给页面上不再存在的元素。它们永远不会被垃圾回收。

解决方案是否将是添加和删除我的小费的自定义 foreach 绑定?

【问题讨论】:

    标签: javascript jquery memory-leaks typescript knockout-2.0


    【解决方案1】:

    我不知道它是否漂亮,但它可以解决我的泄漏

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      相关资源
      最近更新 更多