1

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

首先,在这种情况下,有什么办法可以避免图书馆发生事件?

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

4

3 回答 3

1

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

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

于 2009-05-17T17:12:43.210 回答
0

如果您从 flex 获取作为 XML 数据的结果,我猜您正在使用获取 xml 的 HTTPService,因此您可以访问 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 只是一个自定义对象:您创建的一个类扩展了 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 类。使用一个意味着将一个通用对象(来自外部源)映射到它的动作脚本表示。

没有什么花哨。

希望能帮助到你。

于 2009-05-17T17:04:37.863 回答
0

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

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

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

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

干杯

于 2013-01-27T04:57:08.857 回答