1

私が書いているプログラムの特定の構造についていくつか質問があります。

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

このデータのターンアバウトを達成するにはどうすればよいですか?

4

3 に答える 3

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

}
于 2011-01-28T21:02:22.767 に答える
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() の前に発生したロジックの結果を「見る」ことができることです。ただし、これは、明示的な関数を宣言する場合と比較して、パフォーマンスがわずかに低下します (まさにその理由による)。

また、これを行うには、リクエストごとに新しいリスナーを作成していないことを確認するために、自分でクリーンアップする必要があることも付け加えておきます。

于 2011-01-28T21:12:31.520 に答える
0

Call Responder を次のように利用できます。

<s:CallResponder id="getOperationsResult"/>

次に、これらの行を使用して get 操作から結果を取得します

getOperationResult.token = remoteObject.getOperation();

これにより呼び出しが作成され、結果が返されて getOpresult に格納されます

これにアクセスしたいときはいつでも、そのトークンまたは getOperationResult.lastResult を呼び出すことができます

クリスを助けることを願っています

于 2011-01-28T21:05:16.820 に答える