在Javascript中保存和恢复对象?

时间:2011-05-02 17:23:26

标签: javascript json object raphael

我正在创建一个基于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:循环对象值

更有经验的开发人员会建议什么?

4 个答案:

答案 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)

试试这个Raphael SketchPad