我在循环中调用RemoteObject方法。此方法接收行id作为删除数据库中的行的参数。在循环内部,可以立即进行大量调用。一些调用可以触发FaultEvent。如何检测触发FaultEvent的行ID?
远程对象:
<mx:RemoteObject id="myTableFactory" destination="myTableFactoryFactory"/>
循环:
myTableFactory.addEventListener(FaultEvent.FAULT, faultFunction);
for each (var myTableRow:myTable in rowsToBeExcludedArray)
{
myTableFactory.removeMyTableRow(myTableRow.id);
}
private function faultFunction(e:FaultEvent):void
{
// The main question. How to get myTableRow.id that fired the FaultEvent
}
感谢。
Carlos Lima。
答案 0 :(得分:1)
你一定要阅读AsyncToken。
RemoteObject上的每个远程过程调用都将返回一个:
var token:AsyncToken = myTableFactory.removeMyTableRow(myTableRow.id);
现在,您可以使用此令牌执行两项操作。
添加回复者
您可以为每个调用添加Responder,这样您就可以为每个调用设置唯一的处理程序:
token.addResponder(new Responder(handleResult, handleFault));
在尝试此操作之前,请务必删除全局结果和错误处理程序。此外,我在这里使用了默认的Responder
类,但任何实现IResponder的类都可以。
背驮你的身份
您可以向令牌添加新属性,因为它是动态类。例如,id
可能派上用场:
token.removedId = myTableRow.id;
或者甚至整个班级:
token.removedRow = myTableRow;
现在,您可以在事件处理程序中找到这些值:
private function handleResult(event:ResultEvent):void {
trace(event.token.removedId);
}
同样的原则适用于FaultEvent
答案 1 :(得分:0)
如果您不喜欢小心支持AsyncToken的想法(我并不特别认为这是不切实际的),您可以非常轻松地检索原始请求的详细信息。
我在使用BlazeDS遇到DuplicateSessionDetected错误时使用此技术,以取消客户端ID并重新发出原始请求。
private function handleFault(event:FaultEvent):void
{
const remoteObject:RemoteObject = (event.target as RemoteObject);
const message:RemotingMessage = (event.token.message as RemotingMessage);
message.clientId = null;
remoteObject.getOperation(message.operation)
.send.apply(null, message.body);
}
希望有所帮助!