【问题标题】:Flex Event Dispatching弹性事件调度
【发布时间】:2011-01-28 20:23:22
【问题描述】:

我对正在编写的程序的特定结构有一些疑问。

我正在使用远程对象远程调用 Rails 方法(使用 WebOrb)。问题出现在我取回数据的方式上。

基本上,我有一个函数 getConditions,我在其中向远程调用添加了一个事件侦听器,然后进行远程调用。但是,我想做的是在 getConditions 中取回该数据,以便我可以返回它。这是一个问题,因为我只访问事件处理程序中的事件结果数据。以下是描述此问题的一些基本代码:

public function getConditions():Array
    {

        remoteObject.getConditions.addEventListener("result", onConditionResult);
        remoteObject.getConditions();
       //Here is where I want to get my event.result data back

    }
public function onConditionResult(event:ResultEvent):void
    {
        //Here's the data that I want
        event.result;
    }

我怎样才能实现这种数据周转?

【问题讨论】:

    标签: apache-flex events event-handling event-dispatching


    【解决方案1】:

    flex 中的远程调用始终是异步的,因此您将无法调用 getConditions() 并在那里等待结果。您必须使用函数闭包来处理结果,或者通过在其他地方声明的事件处理程序或在 getConditions() 中立即创建的动态处理程序,如下所示:

    remoteObject.getConditions.addEventListener("result", function(event:ResultEvent):void {
      // Run the code that you would want to when process the result.
    });
    remoteObject.getConditions();
    

    执行上述操作的好处是您将能够“看到”传递给 getConditions() 的参数或函数闭包中 addEventListener() 之前发生的任何逻辑的结果。但是,与声明显式函数相比,这会稍微降低性能(出于这个确切原因)。

    我还应该补充一点,这样做需要您自己进行清理,以确保您不会为每个请求创建新的侦听器。

    【讨论】:

      【解决方案2】:

      你这样做

      public function getConditions():Array
      {
      
          remoteObject.getConditions.addEventListener("result", onConditionResult);
          remoteObject.getConditions();
      
      }
      public function callMyExtraFunction(data:Object):void
      {
           //Here is where you want to get your event.result data back
      }
      public function onConditionResult(event:ResultEvent):void
      {
          //Here's the data that you want
          var data:Object = event.result;
          callMyExtraFunction(data);
      
      }
      

      【讨论】:

        【解决方案3】:

        您可以像这样使用呼叫响应程序:

        <s:CallResponder id="getOperationsResult"/>
        

        然后使用这些行从 get 操作中获取结果

        getOperationResult.token = remoteObject.getOperation();
        

        这会创建调用并返回结果并将其存储在 getOpresult 中

        如果你想访问这个,你可以调用那个令牌或 getOperationResult.lastResult

        希望有所帮助 克里斯

        【讨论】:

          猜你喜欢
          • 2018-03-07
          • 2021-11-10
          • 2021-07-19
          • 1970-01-01
          • 2017-10-21
          • 1970-01-01
          • 1970-01-01
          • 2018-06-25
          • 1970-01-01
          相关资源
          最近更新 更多