KinteticJS -销毁节点,无限while循环,因为子节点没有被删除

KinteticJS - destroying nodes, infinite while loop because child doesn't get removed

本文关键字:子节点 因为 删除 循环 while 节点 无限 KinteticJS      更新时间:2023-09-26

KinerticJS版本:4.4.3

我有这个问题,当我想从舞台上删除一个层。当我调用Layer.destroy()时,动能运行在一个无法移除的节点上。我没有得到任何错误,但是while循环是无限的,因为循环是基于子元素的长度。

destroy: function (_nameSpace) {
    var parent = this.getParent(),
    stage = this.getStage(),
    dd = Kinetic.DD,
    go = Kinetic.Global;
    var tempLength
    // destroy children
    while (this.children && this.children.length > 0) {     
        this.children[0].destroy();
    }
}

在我的例子中,不能被移除的对象是一个Kinetic.Image。当我跟踪节点类型时,它返回一个Shape(这是正确的)。此外,我可以从对象中跟踪所有我想知道的东西…

矩形会被移除。

我在fiddle中创建了一个低级测试,并且一切都工作得很好,所以它必须与我的代码有关。再一次,没有被删除的节点是一个有效的对象,那么为什么没有被删除?

我创建了一个错误信息,这样我就不会每次都崩溃了:

tempLength = this.children.length
this.children[0].destroy();
if (tempLength == this.children.length) {
    throw 'item not removed ' + this.children[0].getNodeType();
}

正如你所看到的,我在销毁一个元素后立即检查子元素的长度是否发生了变化,所以我可以假设没有其他代码干扰。例如,在销毁一个节点时添加一个节点。

我这是死路一条。我希望有人能帮助我或给我指个方向。不管怎样,谢谢你的阅读:)

好了,我知道问题出在哪里了。不知何故,我添加了一个相同的动能。图像两次到一个图层。当销毁图层时,它不能删除它的子图层。

我认为这是一个动态错误。我不应该能够这么容易地打破框架。

https://github.com/ericdrowell/KineticJS/issues/434