汇集和儿童移除

时间:2016-06-07 13:52:52

标签: qooxdoo

我尝试使用我的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();
  }
}

问候,约翰内斯

0 个答案:

没有答案