2011-01-31 5 views
0

Flexには3つの機能を持つ関数があります。Flexでのリモート呼び出し後のコール関数

IはC(呼び出すことwan't
public function update():void 
{ 
    A(); \\Dispatches a event with Remote Call 
    B(); \\Dispatches another event with Remote Call 
    C(); 
} 

)後の両方A()及びB()は、それらの呼び出しから返されると、特定の変数を設定しています。どうやってやるの?

答えて

0

これを頻繁に実行すると(2回以上のリモート呼び出しでは)、リモート呼び出しからのAsyncTokensを処理する独自のカスタムクラスを作成し、最終的なresult()関数を呼び出すことができます。呼び出しは成功する。

もしそうでなければ、ActionScriptはシングルスレッドなので、ローカル変数を使用して両方の呼び出しが成功したかどうかを追跡できます。

private var resultFromRemoteCallA:Object; 
private var resultFromRemoteCallB:Object; 

private function handleRemoteCallA(event:ResultEvent):void { 
    resultFromRemoteCallA = event.result; 
    C(); 
} 

private function handleRemoteCallB(event:ResultEvent):void { 
    resultFromRemoteCallB = event.result; 
    C(); 
} 

private function C():void { 
    if (resultFromRemoteCallA && resultFromRemoteCallB) { 
    // do some thing with the results. 
    } 
} 

private function update():void { 
    resultFromRemoteCallA = resultFromRemoteCallB = null; 
    A(); B(); 
} 

null値が必要な場合は、代わりにブール型変数を使用して結果ハンドラの呼び出しを追跡できます。

EDIT:著者はディスパッチが別のクラスに起こることが示されたので、それを行うための別の方法は、レスポンダに沿って通過し、(被呼者に)のでようAsyncTokenですに添付することであろう。

private function dispatchRemoteCall(resultHandler:Function, faultHandler: Function): void { 
    var resultToken: AsyncToken = remoteObject.foo('bar'); // remoteObject may or may not have a result/fault handler 
    resultToken.addResponder(new mx.rpc.Responder(resultHandler, faultHandler)); 
} 

その後、あなたはときになどのリモートコールが終了します(ディスパッチクラスストアに結果を聞かせすることを選択するか、呼び出し側でそれを扱うことができ、その時点で)、呼び出されるリスナーに沿って渡すことができます。

private function update(): void { 
    classA.dispatchRemoteCall(handleRemoteCallA, handleRemoteCallAFault); 
} 

これを多くやっていると思うかもしれません。また、ParsleyやSpring Actionscriptのようなフレームワークをグローバルなイベントルーティングにすることも考えてみてください。

+0

私の結果ハンドラは別のクラスにあり、そこでいくつかの値を設定します。 – fR0DDY

関連する問題