我知道如果我想用SharedObject存储自定义类,我必须使用registerClassAlias。
registerClassAlias("MyClass", MyClass);
sharedObject.data.myObject = new MyClass();
但就我而言,我有一个自定义类,其字段本身就是自定义类的实例。如何以加载数据时恢复类型的方式存储它?
具体来说,有问题的类是一个Graph
类,它包含一个对象数组。这不是实际的代码,只是一个概述:
class Graph {
public var vertices : Array;
}
我有一个这个Graph类的实例,我正在用vertices
字段填充另一个类的实例,名为Node
。我需要以这样的方式存储这个Graph实例:
vertices
字段,然后以Node
类型访问该数组的元素。我试过在适当的地方投掷一些registerClassAlias("Node", Node)
,但它没有任何效果。有没有办法做到这一点?
答案 0 :(得分:0)
对于更复杂的数据,最好的办法是在要存储在SharedObject中的对象上手动定义load()
和save()
方法。这些方法将定义应保存哪些数据,尽可能简化,并将其整理为您选择的格式,如JSON。
在此示例中,您的Graph
可能有save()
方法,如下所示:
public function save(name:String, sharedObject:SharedObject):void
{
var list:Array = [];
for each(var node:Node in vertices)
{
// Add a simple object defining the important Node properties
// to the array we will save as JSON.
list.push({ x: node.x, y: node.y });
}
sharedObject.data[name] = JSON.encode(list);
}
然后是load()
函数,如下所示:
public function load(name:String, sharedObject:SharedObject):void
{
// Empty current list of vertices.
vertices = [];
var list:Array = JSON.decode(sharedObject.data[name]);
for each(var def:Object in list)
{
// Create real Node from simpler definition.
var node:Node = new Node();
node.x = def.x;
node.y = def.y;
vertices.push(node);
}
}
将使用如下:
existingGraph.save('myGraph', sharedObject);
var newGraph:Graph = new Graph();
newGraph.load('myGraph', sharedObject);