2012-12-28 61 views

回答

1

您應該使用工廠方法代替:http://jsfiddle.net/VDr6z/1/

var obj = { 
    rect : undefined, 
    rectstored : function(){ 
     return new Kinetic.Rect({ 
      x : 10, 
      y : 10, 
      width : 30, 
      height : 30, 
      fill : "rgb(140,140,140)" 
     }); 
    } 
}; 

您還需要管理RECT:

$("#create").click(function(){ 
    if (obj.rect) return; // don't create more than one rect. 

    var rect = obj.rectstored(); // create new rect 

    rect.on("mouseover", function(){ 
     $("#console").html("mouse is over"); 
    }); 
    rect.on("mouseout", function(){ 
     $("#console").html("mouse is out"); 
    }); 

    obj.rect = rect; 

    layer.add(rect); 
    layer.draw(); 
}); 

$("#delete").click(function(){ 
    if (!obj.rect) return; // exit if there is no rect 

    obj.rect.remove(); 
    delete obj.rect;  // delete reference to rect 

    layer.draw(); 
});​ 
+0

它解決了我的問題一段時間!謝謝! – Formiga

0

如果你不需要刪除對象,只是隱藏和取消隱藏對象可以爲您解決

var javascriptobj = { 
    rectstored : new Kinetic.Rect({ 
     x : 10, 
     y : 10, 
     width : 30, 
     height : 30, 
     fill : "rgb(140,140,140)" 
    }) 
}; 

var stage = new Kinetic.Stage({ 
    container : 'canvas', 
    width : 120, 
    height : 120, 
}); 

var layer = new Kinetic.Layer(); 
stage.add(layer); 
    layer.add(javascriptobj.rectstored); 
    javascriptobj.rectstored.hide(); 

$("#create").click(function(){ 
    javascriptobj.rectstored.on("mouseover", function(){ 
     $("#console").html("mouse is over"); 
    }); 
    javascriptobj.rectstored.on("mouseout", function(){ 
     $("#console").html("mouse is out"); 
    }); 

    javascriptobj.rectstored.show(); 
     layer.draw(); 
}); 

$("#delete").click(function(){ 
    javascriptobj.rectstored.hide(); 
    layer.draw(); 
});​ 
+0

這可能是一個很好的解決方案,但人們對這個問題的疑問是,如果rects的數量很高(大約100萬),它會保持穩定性和性能。它是屏幕渲染的一部分,我一次只顯示300個矩形。我會試試這個。謝謝。 – Formiga

+0

這並不能解決我的問題。正如我所說的,當rects計數很高時,表現變差。 – Formiga

+0

所以你需要一次去除所有300個矩形,然後重新創建它們?最好讓它們成爲一個組的一部分,並隱藏整個組而不是每個單獨的對象。相信解決它! – Ani