Flex事件调度

时间:2011-01-28 20:23:22

标签: flex events event-handling event-dispatching

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

我正在使用远程对象远程调用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;
    }

如何实现此数据转型?

3 个答案:

答案 0 :(得分: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);

}

答案 1 :(得分:2)

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 :(得分:0)

你可以像这样使用Call Responder:

<s:CallResponder id="getOperationsResult"/>

然后使用这些行来获取get operations的结果

getOperationResult.token = remoteObject.getOperation();

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

每当你想要访问它时你都可以调用该标记或getOperationResult.lastResult

希望有所帮助 克里斯