引导词缀插件中的These lines似乎导致内存泄漏,因为窗口获取了从未发布的词缀实例的引用。
作为一种解决方法,当从DOM中删除附加的元素时,我将使用以下代码来释放引用:
$(window)
.off('scroll.bs.affix.data-api')
.off('click.bs.affix.data-api');
似乎有点怪异-是否有更好的方法可以做到这一点?在affix plugin docs中什么都没看到。
最佳答案
默认情况下,引导Affix使用scroll
,click
和$(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/