我尝试使用我的qx.application池,因为它在移动设备(尤其是Android设备)上给我带来了显着的性能提升。 对于结构化(以及使用一个命令将巨大的小部件选择设置为“排除”),我使用了许多小部件,包括qx.ui.core.MChildrenHandling。 离开菜单后,我以递归方式遍历所有容器,并将它们和它们的子项添加到池中。 对于对象创建,我尝试从池中获取实例。
这工作得非常好,但过了一段时间后我得到以下错误(在Chrome for Android上):
“Uncaught HierarchyRequestError:无法在'Node'上执行'appendChild':新的子元素包含父元素”
随着物品的处理,一切运行良好。 这使我得出这样的结论:对象并不总是从它们的DOM父元素中移除而导致递归(一个节点被添加到它自己的旧子节点)。 有人能指出我正确的方向如何确保在汇集它们之前删除子节点?
以下是我用于汇总的代码:
function getPoolElement(type) {
var elem = pool.getObject(type);
//console.log(type.toString() + " " + elem.$$hash + " " + elem.classname);
return elem;
}
function poolElements(container) {
var children = container.removeAll();
for(var i = 0; i < children.length; i++) {
if(children[i].classname == "guibuilder.group"
|| children[i].classname == "guibuilder.picgroup"
|| children[i].classname == "guibuilder.tablegroup"
|| children[i].classname == "guibuilder.bordergroup") {
poolElements(children[i]);
} else if(children[i].classname == "guibuilder.smallchoice"
|| children[i].classname == "guibuilder.choice") {
var opts = children[i].removeAll();
for(var j = 0; j < opts.length; j++) {
pool.poolObject(opts[j]);
//opts[j].dispose();
}
}
pool.poolObject(children[i]);
//children[i].dispose();
}
}
问候,约翰内斯