我有一些关于我正在编写的程序的特殊结构的问题。
我使用远程对象对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;
}我如何才能实现这种数据转变?
发布于 2011-01-29 05:12:32
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()之前发生的任何逻辑的结果。然而,与声明显式函数相比,这会对性能造成轻微的影响(正是由于这个原因)。
我还应该补充说,这样做需要您自己清理,以确保您不会为每个请求创建一个新的侦听器。
发布于 2011-01-29 05:02:23
你可以这样做
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);
}发布于 2011-01-29 05:05:17
您可以像这样使用Call Responder:
<s:CallResponder id="getOperationsResult"/>然后使用这些行来获取get操作的结果
getOperationResult.token = remoteObject.getOperation();这将创建调用并返回结果,并将其存储在getOpresult中
如果你不想访问它,你可以调用令牌或getOperationResult.lastResult
希望这能帮助克里斯
https://stackoverflow.com/questions/4832701
复制相似问题