2011-06-10 2 views
0

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

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

Я использую 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 переменная равна нулю. Есть ли чем-то, чем перебирать event.result и копировать их в _list в качестве объектов SessionVO?

+1

Какая бэкэнд-технология вы интегрируете? –

ответ

2

Если вы используете тег [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 Remoting преобразует его для вас. Бывают случаи, когда объекты могут стать непрозрачными, что может потребоваться для создания кода ObjectProxy для пользовательского маршалинга, но это не является обычным явлением. Маршалинг RemoteClass может обрабатывать очень сложные типы объектов, подтипы, встроенные объекты в объектах и ​​т. Д. Пока все объекты на стороне AS набраны с помощью RemoteClass, он работает так, как ожидалось.

0

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

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

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

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

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

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

0

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

public function result_handler(event:ResultEvent):void{ 

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

} 
0

сделать 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> 
Смежные вопросы