У меня проблема с конваями. У меня есть сцена konva, которую я клонировал во временную Сцена, поэтому я могу отменить изменения, сделанные пользователем, когда пользователь отменяет. То, как я это делаю, заключается в том, что я клонирую существующую Сцену во временную, уничтожаю детей происхождения, и после этого я перемещаю детей временного Сцена обратно в оригинал и уничтожаю временную Сцена. Проблема в том, что когда я пытаюсь получить доступ к дочерним элементам сейчас, например, через findOne ('# id-of-child'), я получаю неопределенное значение, даже если дети существуют.Не удается получить доступ к детям стадии Konva после клонирования
Вот что я сделал до сих пор:
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();
},
Теперь, когда пользователь открывает панель инструментов, чтобы изменить что-то, текущий этап клонируют с помощью функции «клон», и когда пользователь отменяет его изменения, функция «restore» вызывается с клонированной стадией в качестве параметра. Но после этого, когда я пытаюсь сделать что-то вроде следующего, они не работают должным образом.
some_child_of_the_stage.getLayer(); -> returns null
var edit_layer = this.stage.findOne('#edit-layer'); -> returns undefined
Но «some_child_of_the_stage» действительно существует и имеет слой, конечно, и стадия имеет ребенка с идентификатором «редактирования слоя».
Я и мой коллега в конце нашего остроумия.
Я благодарю вас за любую помощь и предложения.
Update: Короткая скрипку, показывая проблему с помощью console.log: fiddle
Можете ли вы сделать jsFiddle, чтобы люди, которые не знакомы с Konva.js можно проверить? – Sergio