事情就是这样的。我正在获取XML数据,我需要等待它被解析,然后在解析完成后从我的库中分派事件。
首先,在这种情况下,有没有办法避免库中的事件?
发布于 2009-05-17 17:12:43
如果你可以使用AMFPHP,我强烈推荐它。可以在服务器和actionscript中定义值对象(VO)。这将允许您在客户端和服务器之间来回传递强类型对象。根本不需要解析、使用e4x或遭受那样的痛苦。
VOs也被称为DTO (data transfer objects,数据传输对象),其中booth是面向对象的设计模式。
发布于 2009-05-17 17:04:38
如果您从flex获得xml数据形式的结果,我猜您使用的是获得XML的HTTPService,所以您要访问ResultEvent的result属性中的数据。
例如:
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中的valueobject将是一个代表一项数据的actionscipt类。使用one表示将通用对象(来自外部源)映射到其actionscript表示形式。
没什么花哨的。
希望能有所帮助。
发布于 2013-01-27 12:57:09
当与外部对象结合使用时,VO将允许数据从一个对象(以一种语言)传输到等效对象(以另一种语言)。
因此,与解析XML、e4x等不同,您可以让flex通过网关(即ZendAMF、amfPHP、sabreAMF等)直接与PHP对话。
在这个站点上有更多的信息来解释如何做到这一点(设置一个RemoteObject)。当然,George上面说的很好,如果你打算做远程对象,你需要注册这个类。
http://www.brentknigge.com/?q=node/496
干杯
https://stackoverflow.com/questions/872005
复制相似问题