1

ループ内で 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
}

ありがとう。

カルロス・リマ。

4

2 に答える 2

1

あなたは間違いなくAsyncTokenを読むべきです。

RemoteObject のすべてのリモート プロシージャ コールは、いずれかを返します。

var token:AsyncToken = myTableFactory.removeMyTableRow(myTableRow.id);

このトークンでできることは 2 つあります。

レスポンダーを追加する

各呼び出しにレスポンダーを追加できます。これにより、呼び出しごとに一意のハンドラーを持つことができます。

token.addResponder(new Responder(handleResult, handleFault));

これを試す前に、必ずグローバル結果と障害ハンドラーを削除してください。また、ここではデフォルトResponderクラスを使用しましたが、IResponderを実装する任意のクラスを使用できます。

IDをピギーバック

トークンは動的クラスであるため、トークンに新しいプロパティを追加できます。たとえば、次のid場合に便利です。

token.removedId = myTableRow.id;

または、クラス全体でさえ:

token.removedRow = myTableRow;

これで、イベント ハンドラーでこれらの値を見つけることができます。

private function handleResult(event:ResultEvent):void {
    trace(event.token.removedId);
}

同じ原則が適用されますFaultEvent

于 2012-05-11T11:51:30.190 に答える
0

AsyncToken をピギー バッキングするという考えが気に入らない場合 (実際的でない場合があるため、私は特に好きではありません)、元の要求の詳細を非常に簡単に取得できます。

BlazeDS で DuplicateSessionDetected エラーが発生したときにこの手法を使用して、クライアント ID を null にし、元の要求を再発行します。

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);
}

それが役立つことを願っています!

于 2013-02-25T11:34:35.357 に答える