【发布时间】:2014-05-03 22:54:50
【问题描述】:
过去几天我在 KineticJS 和我的 Web 应用程序中遇到了一个非常奇怪的问题:
一般来说,我的应用程序由几个“页面”组成,它们由Kinetic.Groups 表示。除一个之外的所有组都是偏移的,这意味着不可见。不可见的组都临时添加到单独的Kinetic.Layer(用于缓存等...),唯一可见的页面添加到另一个Kinetic.Layer以使其具有交互性。
所有页面(或Kinetic.Groups)都存储在一个数组中(因为没有固定数量),并按如下方式访问:activelayer.add(pages[1]);。
到目前为止一切都很好,但是当我尝试像图像一样破坏Kinetic.Shape 时,它不会破坏图像,这意味着它仍然存在,可见且可交互。在下一步中,我想销毁整个“临时”Kinetic.Layer,这导致了无限循环并导致我的浏览器崩溃。
到目前为止,我已经调查了 KineticJS 的 destroy 函数,发现 go._removeID(this.getId()); 和 go._removeName(this.getName(), this.getId()); 函数只接收 undefined 值。
销毁与上述页面无关的层,没有任何问题。
非常感谢任何形式的帮助。
【问题讨论】:
-
你在销毁对象后绘制图层了吗?这是一个常见的错误,它“看起来”好像什么都没有发生。另外,您是否为要销毁的物品设置了名称和/或 ID?这可能就是他们未定义的原因..
-
感谢您的回复。是的,该层在销毁对象后重新绘制,不,我没有设置任何名称和/或 ID,但这不应该是问题,因为用于“查找”的每个对象的 KineticJS 内部
_id正确的形状,同时摧毁它。此外,如果我销毁一个形状,KineticJS 会返回该对象,该对象应该具有undefined值,因为它已被销毁。在我的情况下,它返回的形状及其所有属性,如destroy-process 从未执行过。 -
我的下一个猜测是您的 Kinetic.Shapes 没有正确存储到您的 activeLayer 数组中。您是否尝试过通过直接访问它的 ID 来破坏形状?你得到相同的结果吗?您如何引用要销毁的动力学对象?
-
希望您现在已经追查了保留的引用,但如果没有,我们将需要一些代码来进行真正的分析。
-
很遗憾,我没有时间检查保留的参考文献,但我会尽快通知您;)
标签: javascript html html5-canvas kineticjs