0

我一直在尝试加载一个图层(放弃尝试图层并开始尝试使用舞台),我使用 KineticJS .toJSON() 方法将其保存为 JSON 对象文字。我一直在调试我的脚本,在调用 Kinetic.Node.create 之前一切似乎都很好。这是我的代码:

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>

和错误日志:

SyntaxError: Unexpected token o
at Object.parse (native)
at Function.Kinetic.Node.create (http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.5.4.min.js:2:25166)
at HTMLButtonElement.$.on.click (http://localhost/mosaicos/main.js:181:38)
at HTMLDocument.b.event.dispatch (http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3:28337)
at HTMLDocument.v.handle (http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3:25042)

不确定我是否做错了什么,任何帮助将不胜感激。

4

1 回答 1

0

为了使用,Kinetic.Node.create您需要传递您保存的相同字符串 ( check) 而不是 parsedJSON 字符串 ( s) 所以您的命令基本上应该如下所示:

var newNode = Kinetic.Node.create(stage.toJSON());

将 stage.toJSON 替换为您保存该字符串的变量。

这应该给你正确的想法。或者,只需打开开发人员工具并在保存后放置一个断点。将现在包含阶段的变量的值复制为 JSON 字符串,然后使用复制的字符串作为参数Kinetic.Node.create控制台中运行。

于 2013-06-21T08:22:18.203 回答