Заполнение свойства ArrayCollection с помощью [RemoteClass]

Хорошо, я передаю сложный объект из моей библиотеки .NET в мое приложение Flex через WebOrb. Для автоматического перевода я использую тег метаданных [RemoteClass] следующим образом:

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

    public var Name:String;
}

Это работает абсолютно нормально, пока я не попытаюсь расширить класс Plan, чтобы он содержал массив сложных элементов:

.СЕТЬ:

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, свойство children класса ActionScript Plan имеет значение 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?

Спасибо!


person user176504    schedule 13.07.2010    source источник


Ответы (1)


Для меня не удивительно, что метод set никогда не вызывается. Теоретически объект должен возвращаться с сервера с уже установленными элементами.

Тем не менее, я не думал, что ArrayCollection будет соответствовать объекту на стороне сервера. Попробуйте использовать массив в Flex. В .NEt следует использовать один из «поддерживаемых» типов. Если List является реализацией IList, то, вероятно, у вас все в порядке.

Вот таблица преобразования .NET в Flash Player WebORB < / а>

person JeffryHouser    schedule 13.07.2010
comment
Массив! Конечно! ДУУУУУХ !!! Большое спасибо, просто изменение его из ArrayCollection отлично сработало! - person user176504; 13.07.2010
comment
Рад помочь! Если вам нужна коллекция ArrayCollection, вы всегда можете добавить такой метод, как getChildrenAsArrayCollection, который выполняет преобразование за вас. Однако будьте осторожны при добавлении новых свойств в класс Flex, так как это может помешать автоматическому преобразованию AMF. - person JeffryHouser; 13.07.2010