У меня проблема с конвайсом. У меня есть этап konva, который я клонирую во временный этап, поэтому я могу отменить изменения, сделанные пользователем, когда пользователь отменяет их. Я делаю это следующим образом: я клонирую существующий этап во временный, уничтожаю дочерние элементы исходного, а затем перемещаю дочерние элементы временного этапа обратно в исходный и уничтожаю временный этап. Проблема в том, что когда я пытаюсь получить доступ к дочерним элементам сейчас, например, через findOne ('# id-of-child'), я получаю значение undefined, хотя дочерние элементы существуют.
Вот что я сделал до сих пор:
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» действительно существует и, конечно же, имеет слой, а у сцены есть дочерний элемент с идентификатором «edit-layer».
Я и мой коллега находимся на грани остроумия.
Я ценю любую помощь и предложения, спасибо.
Обновление: короткая скрипка, показывающая проблему через console.log: скрипка