Javascript KineticJS Node.create from JSON object literal
我一直在尝试加载一个层(放弃尝试使用层,开始尝试使用stage),并使用KineticJS.toJSON()方法将其保存为JSON对象文本。我一直在调试我的脚本,在调用Kinetic.Node.create之前,一切似乎都很好。这是我的密码:Javascript KineticJS Node.create from JSON object literal,javascript,jquery,html5-canvas,kineticjs,Javascript,Jquery,Html5 Canvas,Kineticjs,我一直在尝试加载一个层(放弃尝试使用层,开始尝试使用stage),并使用KineticJS.toJSON()方法将其保存为JSON对象文本。我一直在调试我的脚本,在调用Kinetic.Node.create之前,一切似乎都很好。这是我的密码: var stage = new Kinetic.Stage({ container: 'container', width: 1000, height: 650 }); var check; $(document).on({ c
var stage = new Kinetic.Stage({
container: 'container',
width: 1000,
height: 650
});
var check;
$(document).on({
click: function(){
check = stage.toJSON();
}
},'#save');
$(document).on({
click: function(){
try{
//parse check string into object literal
var s = JSON.parse(check);
//check if s is object literal
if( Object.prototype.toString.call(s) === '[object Object]' ) {
//this is where the code stops executing
stage = Kinetic.Node.create(s,'container');
stage.draw();
}
}
catch(e){
console.debug(e.stack);
console.trace();
}
}
},'#load');
我的HTML:
<div id="container">
</div>
<div id="buttons">
<button id="save">
Save
</button>
<button id="load">
Load
</button>
</div>
不确定我是否做错了什么,如果有任何帮助,我们将不胜感激。为了使用
Kinetic.Node.create
您需要传递保存的相同字符串(检查
),而不是parsedJSON字符串(s
)
因此,您的命令基本上应该如下所示:
var newNode = Kinetic.Node.create(stage.toJSON());
将stage.toJSON替换为保存该字符串的变量
这应该给你正确的想法。或者,只需打开开发工具并在保存后放置断点。将现在包含stage的变量的值复制为JSON字符串,然后在控制台中以复制的字符串作为参数运行
dynamic.Node.create
。在.create()
调用中,您将'container'
作为字符串传递,但在dynamic.Node.create的文档中,它说它应该是一个DOM元素,而不是一个字符串。感谢您的回复,但是我认为这不是问题所在,因为我已经尝试加载其他对象,如层,但没有可选的DomeElement容器,并且它发送相同的错误。另外,我在上查看了这个示例,它使用了相同的语法。文档中说“只有在创建阶段节点时才使用可选容器dom元素”,因此阶段可能需要它,但层/其他对象可能不需要。我仍然使用与画布加载示例中使用的语法完全相同的语法,我得到了错误
var newNode = Kinetic.Node.create(stage.toJSON());