我正在创建一个基于Web的基本图表工具,使用Javascript和Raphael Library来创建形状。我现在想知道如何保存和恢复我创建的对象。
Belows代码创建一个基本形状,并启用拖动。我如何能够保存和恢复这样的对象:
var cubeD = paper.rect(400, 400, 50, 50);
cubeD.attr({"fill":"yellow"});
cubeD.draggable.enable();
cubeD.name = 'cubeD';
objArray.push(cubeD);
objArray_txt.push(cubeD.name);
objAssoc['cubeD'] = cubeD;
我尝试使用JSON来存储对象,但以下代码似乎不起作用:
var myJSON = JSON.encode(cubeD);
但我得到了错误
TypeError:循环对象值
更有经验的开发人员会建议什么?
答案 0 :(得分:1)
https://github.com/douglascrockford/JSON-js
cycle.js文件允许循环引用。
然后你只需要使用这些函数来避免你的错误,只需使用所谓的“普通”JSON方法来保存和恢复你的对象(询问你是否无法弄清楚如何)。当使用“普通”JSON方法恢复对象时,不要忘记将对象的构造函数的新实例作为参数给出,以便它具有您需要的所有方法并按预期运行(因为JSON仅保存数据,而不是函数,因此,它不能存储构造函数)。
答案 1 :(得分:0)
您不能依赖于能够序列化外部框架所做的对象。要么API支持它,要么不支持(我不熟悉Raphael)。
解决这个问题的方法是使用一个中间格式,它可能是一大块JSON,并序列化。这包含对象的规范。方法将调用您的API以从JSON对象构建对象。这将在反序列化后调用。
答案 2 :(得分:0)
我在大多数项目中都使用这个库: https://github.com/douglascrockford/JSON-js
它有一个$.toJSON
方法,可以将javascript序列化/反序列化为字符串。我不确定这是否是最好的方法,但它肯定对我们有用。我将JSON放在cookie中并从中读取。
答案 3 :(得分:0)