我对我正在编写的程序的特定结构有一些疑问。
我正在使用远程对象远程调用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;
}
如何实现此数据转型?
答案 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
希望有所帮助 克里斯