【问题标题】:What are VOs in flex or amfphp?flex 或 amfphp 中的 VO 是什么?
【发布时间】:2009-05-16 08:51:27
【问题描述】:

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

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

我看到的另一种方法是使用 VO。那么这是什么以及如何让它发挥作用。

【问题讨论】:

    标签: apache-flex amfphp


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如果您从 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 用尽可能少的词将是一个代表数据项的 actioncipt 类。使用一个意味着将一个通用对象(来自外部源)映射到它的动作脚本表示。

      没什么花哨的。

      希望对你有帮助。

      【讨论】:

      • VO 与外部数据源没有任何关联。它们对于本地生成的数据也非常有用。
      【解决方案3】:

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

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

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

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

      干杯

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-29
        • 2012-10-20
        • 1970-01-01
        相关资源
        最近更新 更多