3

我的 Flex 项目中有一个名为 HashMap 的便利集合类,它本质上是 flash.utils.Dictionary 的包装器,带有一堆便利方法和一个添加的(同步的)ArrayCollection,以便我可以将 HashMap 传递给需要的可绑定控件一个数组集合。这一切都很好。

我刚刚发现,不能正常工作的是将 HashMap 放在本地 SharedObject 中。

注册该类会导致它被存储并作为正确的类型返回,并且 ArrayCollection 成员很好地返回,但是 Dictionary 不存储它的数据..

这是一个片段:

[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();

这就是相关的东西。让 Dictionary 正确存储自身的过程是什么?实际上,我必须使 ArrayCollection 瞬态,因为现在每次刷新 SO 时,我都会获得(在字典中唯一键入的)数据的另一个副本。

4

1 回答 1

10

我对此进行了更多修改,并得到了很多愚蠢的结果,试图让序列化“正常工作”,所以我终于实现了 IExternalizable 接口,并修复了它。

    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() 调用。但除此之外,它还有效。

于 2009-05-12T00:12:44.800 回答