引导词缀插件中的These lines似乎导致内存泄漏,因为窗口获取了从未发布的词缀实例的引用。

作为一种解决方法,当从DOM中删除附加的元素时,我将使用以下代码来释放引用:

$(window)
    .off('scroll.bs.affix.data-api')
    .off('click.bs.affix.data-api');

似乎有点怪异-是否有更好的方法可以做到这一点?在affix plugin docs中什么都没看到。

最佳答案

默认情况下,引导Affix使用scrollclick$(window)命名空间侦听.bs上的.affix.data-api事件。
$.off('.affix');将删除.affix命名空间中的所有侦听器。$(window).off('.affix');将从窗口元素中删除.affix命名空间中的所有侦听器。如果只有一个Affix,并将其粘贴到窗口,则其效果与$.off('.affix');完全相同

添加其他命名空间会使它更加具体,但是除非您在自己的代码中使用.affix命名空间,否则添加的特异性不会更改任何内容。如果您正在使用任何其他引导元素,则不想独立于.affix删除其他 namespace 。
$('.affix').off('.affix');将不起作用,因为侦听器不在附加元素上,而是在附加元素的目标(即窗口)上。

pstenstrm是正确的,没有办法检测到元素已从DOM中删除或为此注入(inject)。因此,如果代码稍后重新注入(inject)该元素,并且您想要再次充当Affix,则需要使用bootstrap JS api再次调用Affix。

关于javascript - 引导词缀插件内存泄漏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21713468/

10-10 07:51