Spread.Sheets 支持以下类型的序列化:
当序列化时,自定义类型的 toJSON 方法将会根据当前对象生成一个 JSON 字符串,并在字符串中加入当前的类型信息。字符串类型是和 window 相关的,比如 “mynamespace.MyCellType”。
当反序列化时, getTypeFromString 方法会先创建一个类型的实例,然后调用该实例上的 fromJSON 方法还原该对象。
如果类型字符串是自定义的字符串,自定义字符串将会按照自定义类型来序列化和反序列化。
如果你有诸如循环引用或者减少 JSON 尺寸一类的需求,请重写 fromJSON 和 toJSON 方法。
如果你不想使用 window 上的类型,你可以自行调用 getTypeFromString 方法来序列化和反序列化
以下例子使用了 spread1 伤的 toJSON 方法和 spread2 上的 fromJSON 方法来实现从 spread1 上到 spread2 上的数据传递。
点击按钮后,“MyTag”实例将会出现在 spread2 上。
<!DOCTYPE html> <html> <head> <title>Spread HTML test page</title> <link type="text/css" href="./css/gc.spread.sheets.10.x.x.css" rel="stylesheet" /> <script src="http://code.jquery.com/jquery-2.0.2.js" type="text/javascript"></script> <script type="text/javascript" src="./scripts/gc.spread.sheets.all.10.x.x.min.js"></script> <script type="text/javascript"> //Custom tag function MyTag(name, age) { this.name = name; this.age = age; this.typeName = "MyTag"; } MyTag.prototype.toJSON = function () { var settings = {}; settings.name = this.name; settings.age = this.age; settings.typeName = this.typeName; return settings; }; MyTag.prototype.fromJSON = function (settings) { this.name = settings.name; this.age = settings.age; this.typeName = settings.typeName; }; $(function () { var spread1 = new GC.Spread.Sheets.Workbook(document.getElementById("ss"),{sheetCount:3}); var sheet1 = spread1.getActiveSheet(); sheet1.tag(new MyTag("Ivy", 24)); sheet1.setTag(0, 0, new MyTag("Yang", 25)); $("#btn1").click(function () { //Serialize ss to ss1. var jsonStr = JSON.stringify(spread1.toJSON()); var spread2 = new GC.Spread.Sheets.Workbook(document.getElementById("ss1"),{sheetCount:3}); spread2.fromJSON(JSON.parse(jsonStr)); var sheet2 = spread2.getActiveSheet(); alert("Tag of sheet:" + JSON.stringify(sheet2.tag())); alert("Tag of Cell[0,0]: " + JSON.stringify(sheet2.getTag(0, 0))); }); }); </script> </head> <body> <div> <div id="ss" style="height: 200px; width: 500px"></div> <div id="ss1" style="height: 200px; width: 500px"></div> </div> <input type="button" id="btn1" value="Serialization" /> </body> </html> |