1

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 が返されます (これは正しいです)。また、オブジェクトから知りたいことをすべてトレースできます...

長方形は削除されます。

私はフィドルで低レベルのテストを作成しましたが、すべてがうまく機能しているので、私のコードで何かをする必要があります。繰り返しになりますが、削除されていないノードは有効なオブジェクトですが、なぜ削除されないのでしょうか?

エラー メッセージを作成したので、毎回ブラウザがクラッシュすることはありません。

tempLength = this.children.length
this.children[0].destroy();

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

ご覧のとおり、アイテムを破棄した直後に、子の長さが変化したかどうかを確認するので、他のコードが干渉していないと推測できます。たとえば、ノードを破棄するときにノードを追加します。

私はここで行き止まりです。誰かが私を助けてくれたり、私を何かの方向に向けてくれることを願っています. とにかく、読んでくれてありがとう:)

4

1 に答える 1