就是这样。我正在获取XML数据,我需要等到它被解析,然后在从我的库完成解析后调度事件。
首先,有没有办法在这种情况下避免库中的事件?
我看到的另一种选择是使用VO。那么这是什么以及如何使其发挥作用。
答案 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
干杯