【发布时间】:2017-01-06 06:47:56
【问题描述】:
我对 konvajs 有疑问。我有一个 konva Stage,我克隆到一个临时 Stage,所以当用户取消时,我可以恢复用户所做的更改。 我这样做的方法是,我将现有 Stage 克隆为临时 Stage,销毁原始 Stage 的子级,然后将临时 Stage 的子级移回原始 Stage 并销毁临时 Stage。问题是,当我现在尝试访问孩子时,例如通过 findOne('#id-of-child'),即使孩子存在,我也会得到未定义。
这是我到目前为止所做的:
clone: function()
{
var cloned_stage = this.stage.clone();
Array.each(this.stage.getChildren(), function(layer, lidx) {
if (layer.attrs.id) {
// setting the id to the ones, the children had before
cloned_stage.children[lidx].attrs.id = layer.attrs.id;
}
});
return cloned_stage;
},
restore: function(tmp_stage)
{
this.stage.destroyChildren();
Array.each(tmp_stage.getChildren(), function(layer, lidx) {
var tmp_layer = layer.clone();
tmp_layer.attrs.id = layer.attrs.id;
tmp_layer.moveTo(this.stage);
}.bind(this));
tmp_stage.destroy();
this.stage.draw();
},
现在,当用户打开工具箱进行更改时,当前阶段将使用“克隆”功能进行克隆,当用户取消更改时,将使用克隆的阶段作为参数调用“恢复”功能。 但在那之后,当我尝试执行以下操作时,它们并没有按预期工作。
some_child_of_the_stage.getLayer(); -> returns null
var edit_layer = this.stage.findOne('#edit-layer'); -> returns undefined
但是“some_child_of_the_stage”确实存在并且当然有一个层,并且该阶段有一个ID为“edit-layer”的孩子。
我和我的同事都束手无策了。
感谢您的任何帮助和建议。
更新: 通过 console.log 显示问题的简短小提琴: fiddle
【问题讨论】:
-
能不能做个jsFiddle让不熟悉Konva.js的人测试一下?
标签: javascript html html5-canvas mootools konvajs