Преобразование массива объектов ObjectProxy в пользовательские объекты - PullRequest
0 голосов
/ 11 июня 2011

У меня есть служба, которая возвращает массив объектов ObjectProxy.Я хотел бы привести это к пользовательскому объекту (объекту значения) и создать коллекцию ArrayCollection.Как я могу это сделать?

Отредактировано:

Я использую Django и PyAMF для бэкэнда.Мне пришлось написать собственный запрос SQL, и я оборачиваю полученные записи в ObjectProxy и отправляю весь результат в виде ArrayCollection.

Вот мой код на стороне клиента:

[ArrayElementType("SessionVO")]
[Bindable]
private var _list:ArrayCollection;

private function onSessionResultSuccess(event:ResultEvent):void
{
    _list = new ArrayCollection(event.result as Array));
}

Когдаотладка, я заметил, что элементы event.result имеют тип ObjectProxy, но переменная _list имеет значение null.Есть ли что-то еще, кроме как зацикливать на event.result и копировать их в _list как объекты SessionVO?

Ответы [ 4 ]

2 голосов
/ 11 июня 2011

Если вы используете тег [RemoteClass] на своих значимых объектах, Flex remoting (Blaze, LCDS) преобразует их в ваш значимый объект для вас при отправке / возврате из вызова удаленной службы.

Синтаксис для RemoteClass:

[RemoteClass(alias="com.co.custom.remote.class")]  <--- point to the remote java/php class   def
Public Class FooBar
{
    public instance variable;
}

Ваш сервис может затем вернуть массив или хэш-таблицу этого класса, и удаленное взаимодействие с Flex преобразует его для вас. В некоторых случаях объекты могут стать непрозрачными, что может потребоваться для создания кода ObjectProxy для выполнения пользовательского маршалинга, но это не является распространенным явлением. Маршалинг RemoteClass может обрабатывать очень сложные типы объектов, подтипы, внедренные объекты в объекты и т. Д. Пока все объекты на стороне AS набираются с помощью RemoteClass, он работает должным образом.

0 голосов
/ 22 августа 2013

make makeObjectsBindable = "false" в свойстве веб-службы, он вернет объект.

<s:WebService id="ws" wsdl="http://`xxxx/mobiledata/MobileDataService.asmx?wsdl" fault="fault(event)">
    <s:operation 
        name="GetAll" 
        resultFormat="object"
        result="GetData(event)" makeObjectsBindable="false"
        />
    <s:operation 
        name="Create" 
        resultFormat="object"
        result="SaveData(event)"
        />
</s:WebService>
0 голосов
/ 23 ноября 2012

Вы можете использовать com.adobe.serializers.utility.TypeUtility;

public function result_handler(event:ResultEvent):void{

    var result:Array = TypeUtility.convertListToStrongType(event.result,YourValueObject) as Array;

}
0 голосов
/ 11 июня 2011

Я не уверен, что вы подразумеваете под "объектами ObjectProxy". Мне кажется, что вы уже получили массив пользовательских объектов.

Я рекомендую изучить шлюз AMF. У большинства более серьезных языков есть дополнительный модуль AMF. Он встроен в ColdFusion, BlazeDS и LiveCycle. В PHP есть ZendAMF и AMFPHP. .NET имеет FlourineFX и WebORB. Это всего лишь несколько примеров.

шлюзы AMF имеют функцию автоматического преобразования; так что объект на стороне сервера может легко отображаться на объект на стороне клиента. Вот некоторая информация о теге RemoteObject , которая описывает это. По сути, вы указываете метаданные RemoteClass на своем объекте на стороне клиента и обычно указываете некоторую форму отображения на объекте на стороне сервера. Шлюз AMF магически обрабатывает остальную часть преобразования.

В обработчике результатов RemoteObject вам просто нужно преобразовать возвращаемый массив в ArrayCollection. Обычно примерно так:

var resultArray : Array = event.result as Array;
var resultCollection : ArrayCollection = new ArrayCollection(resultArray);

Если вы не контролируете серверную часть этого приложения, вы можете зацикливаться на результатах и ​​вручную преобразовывать их в объекты Flex на стороне клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...