使用[RemoteClass]填充ArrayCollection属性

时间:2010-07-13 13:19:05

标签: flex actionscript remoting arraycollection remoteobject

好的,我正在通过WebOrb将一个复杂的对象从我的.NET库传递到我的Flex应用程序。 为了自动翻译,我使用[RemoteClass]元数据标签,如下所示:

[RemoteClass(alias="test.PlanVO")]
public class Plan
{
    [SyncId]
    public var id:int;

    public var Name:String;
}

这非常正常,直到我尝试将Plan类扩展为包含一系列复杂项目:

.NET:

public class PlanVO
{
    public int id  { get; set; }
    public string Name { get; set; }
    public List<PlanElementVO> children { get; set; }
}

public class PlanElementVO
{
    public string elementName { get; set; }
}

的ActionScript:

[RemoteClass(alias="test.PlanVO")]
public class Plan
{
    [SyncId]
    public var id:int;

    public var Name:String;

    public var children:ArrayCollection;
}

[RemoteClass(alias="test.PlanElementVO")]
public class PlanElement
{
    public var elementName:String;
}

在这种情况下,即使.NET库返回子项,ActionScript Plan类的children属性也为null。

我尝试将子字段更改为这样的属性:

private var _children:ArrayCollection;
public function get children():ArrayCollection 
{
    return _children;
}
public function set children(o:*):void
{
    if(o is ArrayCollection)
        _children = o;
    else if(o is Array)
        _children = new ArrayCollection(o);
    else
        _children = null;
}

但是set函数永远不会被调用。

如何以这种方式让孩子们进入我的Flex应用程序?

谢谢!

1 个答案:

答案 0 :(得分:0)

对我来说,set方法从未调用过,这并不奇怪。理论上,该对象应该从已经设置的项目返回服务器。

那就是说,我认为ArrayCollection不会与服务器端对象匹配。尝试在Flex中使用Array。在.Nt中你应该使用其中一种“支持”类型。如果List是IList的一个实现,那么你可能没问题。

以下是.NET to Flash Player WebORB Conversion Chart