什么是flex或amfphp的VO?

时间:2009-05-16 08:51:28

标签: flex amfphp

就是这样。我正在获取XML数据,我需要等到它被解析,然后在从我的库完成解析后调度事件。

首先,有没有办法在这种情况下避免库中的事件?

我看到的另一种选择是使用VO。那么这是什么以及如何使其发挥作用。

3 个答案:

答案 0 :(得分:1)

如果您可以使用AMFPHP,我会强烈推荐它。您可以在服务器和actionscript中定义值对象(VO)。这将允许您从客户端到服务器来回传递强类型对象。无需解析,使用e4x或以此方式受到影响。

VO也称为DTO(数据传输对象),其展位是面向对象的设计模式。

答案 1 :(得分:0)

如果您从flex获取结果作为XML数据,我猜您正在使用获取xml的HTTPService,因此您可以访问ResultEvent的result属性中的数据。

e.g。

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只是一个自定义对象:您创建的类扩展了Object,其目的是存储来自外部数据源的值(例如,您的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中的valueobject将是表示数据项的actionscipt类。使用一个意味着将通用对象(来自外部源)映射到其动作脚本表示。

没什么特别的。

希望它有所帮助。

答案 2 :(得分:0)

当与外部对象结合使用时,VO将允许数据从一个对象(在一个语言中)传输到等效对象(在另一种语言中)。

因此,您不必解析XML,e4x等,而是通过网关(即ZendAMF,amfPHP,sabreAMF等)直接与您的PHP交谈。

此站点上有更多信息说明了如何执行此操作(设置RemoteObject)。当然,乔治上面所说的是好的,如果你打算做远程对象,你需要注册课程。

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

干杯