我有一個konvajs問題。我有一個克隆階段,我克隆到一個臨時階段,所以我可以恢復用戶取消時所做的更改。 我這樣做的方式是,我將現有舞臺克隆爲臨時舞臺,摧毀起源的孩子,之後我將臨時舞臺的孩子移回到原始舞臺並摧毀臨時舞臺。問題是,當我嘗試通過findOne('#id-of-child')來訪問孩子時,即使孩子存在,我也沒有定義。克隆後無法訪問Konva Stage的兒童
這是我到目前爲止已經完成:
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爲「編輯層」一個孩子。
我和我的同事在我們的智慧結束。
我感謝您的任何幫助和建議,謝謝。
更新: 短撥弄通過的console.log顯示問題: fiddle
你可以做一個這樣的jsfiddle人們不熟悉Konva.js可以測試? – Sergio