我的 Flex 项目中有一个名为 HashMap 的便利集合类,它本质上是 flash.utils.Dictionary 的包装器,带有一堆便利方法和添加的(同步的)ArrayCollection,以便我可以将 HashMap 传递给需要的可绑定控件。一个数组集合。一切都很好。
我现在发现,将 HashMap 放在本地共享对象中是行不通的。
注册该类会导致它被存储并以正确的类型返回,并且 ArrayCollection 成员返回得很好,但字典不存储其数据。
这是一个片段:
[RemoteClass(alias="com.tamedtornado.collections.HashMap")]
public class HashMap extends Proxy
{
public var hash:Dictionary = new Dictionary();
// Keeps an array collection as well so we can give this to a data bound control
[Bindable]
public var collection:ArrayCollection = new ArrayCollection();
这就是相关的内容。让字典正确存储自身的过程是什么?实际上,我必须使 ArrayCollection 成为瞬态,因为现在每次刷新 SO 时,我都会获得(在字典中唯一键入的)数据的另一个副本。
我又对此进行了一些修改,并得到了很多愚蠢的结果,试图让序列化“正常工作”,所以我最终只实现了Externalized接口,并修复了它。
public function readExternal(input:IDataInput):void
{
var hashCount:int = input.readInt();
for (var i:int = 0;i<hashCount;i++)
{
var prop:Object = input.readObject();
var val:Object = input.readObject();
putEntry(prop,val);
}
}
public function writeExternal(output:IDataOutput):void
{
output.writeInt(collection.length);
for (var prop:Object in hash)
{
output.writeObject(prop);
output.writeObject(hash[prop]);
}
}
所有内容都会被存储并正确键入。存储的对象必须是本机类(如 String),或者具有 [RemoteClass] 元数据标记/registerClassAlias() 调用。但除此之外,它还有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)