Что такое ВО в flex или amfphp? - PullRequest
1 голос
/ 16 мая 2009

Вот как это. Я получаю данные XML, мне нужно подождать, пока они будут проанализированы, а затем отправить событие, как только анализ будет выполнен из моей библиотеки.

Во-первых, есть ли способ избежать событий в библиотеке в этом случае?

Альтернатива, которую я видел, состояла в том, чтобы использовать VO. Так что же это такое и как заставить это работать.

Ответы [ 3 ]

1 голос
/ 17 мая 2009

Если вы можете использовать AMFPHP, я очень рекомендую его. Вы можете определить объекты значения (VO) как на сервере, так и в ActionScript. Это позволит вам передавать строго типизированные объекты от клиента к серверу. Нет необходимости анализировать, использовать e4x или страдать таким образом.

ВО также называются DTO (объекты передачи данных), стенды которых являются объектно-ориентированными шаблонами проектирования.

0 голосов
/ 27 января 2013

VO при использовании вместе с внешним объектом позволит передавать данные от одного объекта (в одном языке) к эквивалентному объекту (на другом языке).

Таким образом, вместо того, чтобы анализировать XML, e4x и т. Д., Ваш flex будет напрямую взаимодействовать с вашим PHP через шлюз (т.е. ZendAMF, amfPHP, sabreAMF и т. Д.).

На этом сайте есть дополнительная информация, которая объясняет, как это сделать (настройка RemoteObject). Конечно, то, что Джордж сказал выше, хорошо, вам нужно зарегистрировать класс, если вы планируете делать удаленные объекты.

http://www.brentknigge.com/?q=node/496

Приветствия

0 голосов
/ 17 мая 2009

Если вы получаете свой результат в виде XML-данных из flex, я предполагаю, что вы используете и HTTPService, который получает XML, поэтому вы получаете доступ к данным в свойстве результата ResultEvent.

, например

private function resultHandler(e:ResultEvent):void{}

Вы получите ваши данные:

private function resultHandler(e:ResultEvent):void{
   var tempCollection:ArrayCollection = new ArrayCollection();
   tempCollection = e.result.someDataObject as ArrayCollection;
}

и это место, в котором вы бы установили данные, полученные из xml, в VO

private function resultHandler(e:ResultEvent):void{
  var tempCollection:ArrayCollection = new ArrayCollection();
  tempCollection = e.result.someDataNode as ArrayCollection;
for each(var item:Object in tempCollection){
  var myVO:VO = new Image();
  myVO.firstProperty = item.firstProperty;
  myVO.secondProperty = item.secondProperty;
  myVOCollection.addItem(myVO);
 }
}

Идея проста ... VO - это просто пользовательский объект: создаваемый вами класс расширяет объект и предназначен для хранения значений из внешнего источника данных (например, в результате xml). Поскольку вы используете пользовательский класс, который работает быстрее, чем динамический, и он очень помогает при чтении кода и отладке (вы получаете проверку типов данных и все такое).

Это может быть что угодно: товары в магазине, фотографии в галерее и т. Д.

В примере я предположил, что someDataNode - это узел в вашем xml и myVOCollection, ArrayCollection для ваших данных и т. Д.

так что VO в этом случае у вас будет что-то вроде:

package{
class VO{

private var _firstProperty:String;
private var _secondProperty:String;

public function VO(firstProp:String=null,secondProp:String=null){
_firstProperty = firstProp;
_secondProperty = secondProperty;
}

public function get firstProperty():String{
return _firstProperty;
}

public function set firstProperty(value:String):void{
_firstProperty = value;
}

public function get secondProperty():String{
return _secondProperty;
}

public function set secondProperty(value:String):void{
_secondProperty = value;
}

}
}

Ваш класс Model, вероятно, будет управлять загрузкой и анализом данных, и, как только это будет сделано, он отправит событие, чтобы приложение узнало, что запрашиваемые данные доступны.

В двух словах, как это возможно, значениемобъекта в flex будет класс actionscipt, представляющий элемент данных. Использование одного означает отображение универсального объекта (который поступает из внешнего источника) в его представление ActionScript.

Ничего особенного.

Надеюсь, это поможет.

...