2013-05-06 31 views
1

KinerticJS版本:4.4.3KinteticJS - 摧毀節點,無限while循環,因爲孩子不會被刪除

我有這個問題時,我想從舞臺刪除層。當我調用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(); 
} 

正如你可以看到我正確的檢查後,我被破壞的項目,如果孩子的長度的確發生了變化,所以我可以假設沒有其他代碼是干擾的。例如在銷燬節點時添加一個節點。

我在這裏死路一條。我希望有人能幫助我,或者向任何方向指出我的意思。無論如何,感謝閱讀:)

回答

1

好吧,我想出了問題是什麼。不知何故,我將兩個相同的Kinetic.Image添加到一個圖層。當摧毀圖層時,它無法刪除它的孩子。

我認爲這是一個動力學錯誤。我不應該能夠相對容易地打破框架。

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