2013-12-17 97 views
2

我试图删除包含组(包含形状)或只是形状(线,矩形,圆等)作为其元素的数组的元素。我的作用是类似下面的东西:在Kineticjs中删除数组中的组

deleteSelectedShape = function() { 
var i, 
    shapeObj, 
    selectedObjects = currentContext.getSelectedObjects(), 
    shapeLayer = currentContext.getShapeLayer(); 

    if (selectedObjects && selectedObjects.length > 0) { 
    for (i = 0; i < selectedObjects.length; i += 1) { 
     shapeObj = selectedObjects[i]; 
     // shapeObj.remove(); results same error as mentioned at last 

      if (shapeObj.nodeType === "Group") { 
        shapeObj.destroyChildren(); 
      } 
       else{ 
       shapeObj.destroy(); 
       } 
      } 
     } 

     selectedObjects = []; 
     shapeLayer.draw(); 
    }; 

我想这也

if (shapeObj.nodeType === "Group") { 
      var childs = []; 
      childs = shapeObj.getChildren(); 
      for (var j = 0; j < childs.length; j++) { 
       childs[j].remove(); 
      } 
     } 
     else{ 
      shapeObj.remove(); 
      } 
     } 
    } 

这里单个形状越来越删除,但如果在阵列组,它给错误:

TypeError: this.getParent(...) is undefined in Kineticjs file 

请建议我适当的想法。谢谢 !!!

回答

0

一个问题:从数组中删除项目时,必须反向遍历该数组。

var i=selectedObjects.length-1; 

while(i-- >=0){ 

    var shapeObj = selectedObjects[i]; 

    if (shapeObj.nodeType === "Group") { 
     shapeObj.destroyChildren(); 
    }else{ 
     shapeObj.destroy(); 
    } 

} 
+0

删除任何号码没有任何问题。的选定形状。但是,如果数组中有一个组,只有这样它才会抛出上面的错误。所以我想知道如何从数组中删除该组以及其他形状?循环不是问题。谢谢 !!! – ashokpd

+0

我也试过你的代码。但它又是一样的错误消息! – ashokpd