我使用Polymer.Templatizer将paper-input
个集合的模板标记为custom-element
,其中有一个监听器'change':'_doStuff'
。
基本上,当我通过paper-input
标记20 Polymer.dom(this).appendChild(template.root)
时,会添加一堆听众,如图所示。
然后我调用另一个遍历所有元素的函数并执行Polymer.dom(paperInput.parentNode).removeChild(paperInput)
并添加另一组输入。但它只是因为某些原因而没有将听众分离出去,并且每次迭代都会增加堆...
我相信主机元素上的监听器change
既不是分离的。
我做错了什么?
编辑:我知道它是什么,它不是垃圾收集问题,但是聚合物在模板化时会创建匿名的Polymer.Base实例,并且实际上将所有模板的子项放入其中。当然,实例不会以任何方式删除。我希望我知道如何杀死那些不降低应用程序性能的人。通过定义自定义元素?对我而言似乎是一种开销...答案 0 :(得分:0)
释放内存的一种方法可能是在分离元素之前取消所有侦听器的侦听,以便首先取消引用它们。例如:
for (var i = 0; i < inputList.length; i++) {
this.unlisten(inputList[i], 'change', 'doStuff');
Polymer.dom(inputList[i].parentNode).removeChild(inputList[i]);
}