0

直截了当:如何更改 Kinetic.Group 子项在数组中的位置?对我来说,改变数组和每个孩子的位置真的很重要。

我试图在特定位置添加一个带有 Array.splice 的孩子,但库崩溃了。所以我坚持使用原生.add()函数,从数组末尾取出孩子,然后将其拼接在第一位:

mapTilesContainer.add(image);
var tempChild = mapTilesContainer.children[mapTilesContainer.children.length - 1];
// delete it from the last place
mapTilesContainer.children.splice(mapTilesContainer.children.length - 1, 1);
// add it to the first place
mapTilesContainer.children.splice(0, 0, tempChild);

以某种方式起作用,但是如果我想定期摧毁一个孩子,.destroy()它会再次崩溃:

mapTilesContainer.children[8].destroy();

告诉我:未捕获的 TypeError:无法调用 kinetic.js:2 中未定义的方法“getLayer”

虽然添加和销毁不会弄乱拼接工作。有任何想法吗?

4

1 回答 1

0

--- 非常罕见的要求 ---

您的代码中是否没有解决方法而不是弄乱动力学的内部数组?

弄乱库脚本的内部几乎总是一个坏主意

话虽如此,我还是快速浏览了 kinetic 的 Container.js 代码。

https://github.com/ericdrowell/KineticJS/blob/master/src/Container.js

这是内部添加子方法:

add: function(child) {
    var children = this.children;
    this._validateAdd(child);
    child.index = children.length;
    child.parent = this;
    children.push(child);
    this._fire('add', {
        child: child
    });
    // chainable
    return this;
},

请注意,该child.index属性设置为子项在子项数组中的位置。

正确重置每个 child.index 可能是您操作 Kinetic 的 children 数组的关键。

在 Container.js 的第 237 行是这个内部方法:

_setChildrenIndices: function() {
    var children = this.children, len = children.length;
    for(var n = 0; n < len; n++) {
        children[n].index = n;
    }
},

动力学可能会使用此方法来重置子数组的索引。

如果你打乱 children 数组然后执行你自己的版本_setChildrenIndex,你可能不会炸毁你自己的应用程序。

再次:

弄乱库脚本的内部几乎总是一个坏主意

于 2013-09-14T03:06:17.607 回答