这个问题与我在here之前提出的问题有关。我目前正在使用KineticJS 4.0.5并且我使用多个图层来显示具有不同属性的一些形状。由于我需要经常更改图层内容,因此我使用removeChildren删除图层内容,但似乎removeChildren还会删除与子图层相关联的事件。我想在不删除事件的情况下删除图层子图层,因为我可能需要再次将它们添加到图层中。
我尝试将layer.childrens属性设置为等于空数组,而不是使用removeChildren函数。起初它似乎有效,但在某些情况下,会发生一些奇怪的事情:/某些形状消失,让它们恢复的唯一方法是设置它们的Z指数。我认为这种方法的主要问题与从图层中删除内容时必须重置的一些属性有关,但我不知道它们是什么。
我还尝试在绘制它们之前在每个形状上再次设置事件但它不起作用......它们在屏幕上保持静态...我事件试图在绘制之前对所有形状使用setDraggable(true)他们但没有运气......我是否需要再次创建对象并在每次我想重绘我之前使用的形状的图层时再次将事件应用于它们?或者它是一个很好的方法来存储我的应用程序上的每个屏幕的图层? (我可以有很多不同的屏幕,这会产生很多层次,一次只显示一个......)
如果你知道这个问题的解决方案,请告诉我。我真的需要解决这个问题,因为我的项目能够绘制和重绘非常重要:/
谢谢!
答案 0 :(得分:1)
听起来我需要的是一种从图层中直观地删除对象的方法,但实际上并不是删除它们。而不是使用删除,尝试创建专门用于存储的新图层,其中隐藏该图层中的主要组。您希望此组及其图层为全局图,以便于访问。然后,当您需要从视图中删除对象时,使用moveTo将其移动到存储中,然后再次移动以恢复它以进行查看。
var gObj = {storage : '', storageGroup : ''};
gObj.storage = new Kinetic.Layer();
gObj.storageGroup = new Kinetic.Group({name:'storage', x:0, y:0});
gObj.storage.add(gObj.storageGroup);
// assumes stage is already built
stage.add(gObj.storage);
gObj.storageGroup.hide();
function wareHouse(obj, group, store) {
// obj is an object to store when store === true, otherwise it's a name or id when retreiving, group is the group where object either is or needs to be, store is a boolean value
if (store) {
obj.moveTo(gObj.storageGroup);
} else {
// change the dot to pound ('.' = '#') if using id's
var box = gObj.storageGroup.get('.' + obj)[0];
box.moveTo(group);
}
var parent = group.getLayer();
parent.draw();
}