4

コンテキストに応じてさまざまな方法で応答したいリモート オブジェクト メソッドがいくつかありますが、さまざまな RemoteObject エイリアスを設定したくありません。それを行うためのアドバイスはありますか?背景:

販売統計をさまざまな方法で表示する管理アプリケーションがあるとします。リモート メソッドは次のようになります。

<mx:RemoteObject id="rpt" destination="AMFServer">
  <mx:method name="getSalesStats" fault="getSalesStatsFault(event)" 
    result = "getSalesStatsSuccess(event)" />
</mx:RemoteObject>

getSalesStats メソッドは、従業員 ID と販売タイプを引数として取ります。次のように呼び出します。

rpt.getSalesStats(120, "peanuts");

public function getSalesStatsSuccess(e:ResultEvent):void {
   salesdata:ArrayCollection = e.result.rows as ArrayCollection; 
   salesGraph.dataProvider = salesdata; 
   salesGraphPanel.title = "Peanut Sales, 1990";
}

このメソッドをさまざまなコンテキストで呼び出して、結果をチャートに送信したり、データグリッドに送信したりしたいと考えています。ユーザーが望むものに応じて、チャートのタイトルとタイプを変更できるようにしたいと考えています。私が望むことのいくつかは、サーバーから返されたデータを評価することで達成できます。オブジェクトにはレポート名が含まれているため、その値を評価できます。しかし、サーバーから返されるものだけでなく、いくつかのことを変更する必要があります。これが同期呼び出しである場合は、簡単です。私は次のようなことをします:

function buttonOneClick():void {
   myData1:ArrayCollection = getSalesStats(120, "peanuts");
   myChart.dataProvider = myData1;
}

function buttonTwoClick():void {
   myData2:ArrayCollection = getSalesStats(120, "cashews");
   myDataGrid.dataProvider = myData2; 
}

次のように、リモート メソッドを介して応答関数に何かを渡したいと思います。

rpt.getSalesStats(120, "peanuts", "clicked button one");

ただし、サーバーは最後の引数を必要としないため、もちろんエラーがスローされます。何かご意見は?これが紛らわしいかどうかを明確にします..

4

6 に答える 6

2

Flex 4 および 3.4 では、CallResponder クラスを使用します。

<mx:RemoteObject id="rpt" destination="AMFServer"/>
<s:CallResponder id="toChartResponder" fault="getSalesStatsFault(event)" 
        result = "getSalesStatsToChartSuccess(event)" />
<s:CallResponder id="toDataGridResponder"fault="getSalesStatsFault(event)" 
        result = "getSalesStatsToDataGridSuccess(event)"/>

呼び出しを行うには、メソッド呼び出しから返された AsyncToken をレスポンダーの token プロパティに割り当てます。

toDataGridResponder.token = rpt.getSalesStats();

これにより、応答定義がメソッド呼び出しから分離され、必要なロジックでラップできます。

于 2009-11-09T19:07:00.420 に答える
2

これは、RemoteObject メソッド呼び出しで AsyncToken を使用して、必要なことを正確に実行する優れた例です。

AsyncToken を使用する際に留意すべきことは、これは動的オブジェクトであり、任意のプロパティを追加できるということです。レスポンダー メソッドのイベントは AsyncToken への参照を保持し、動的プロパティにアクセスして、応答のコンテキストを簡単に識別できます。

于 2009-09-02T19:19:04.297 に答える
0

var rpcCall:AsyncToken;

    rpcCall = remoteService.getSessionId();
    rpcCall.addResponder(new Responder(handler_getSessionIdSuccess, handler_getSessionIdFault) );

    rpcCall = remoteService.getMyData();
    rpcCall.addResponder(new Responder(handler_getMyDataSuccess, handlerfault));

remoteobjectの「remoteService」インスタンスそれが理にかなっていることを願っています。

于 2011-03-29T07:17:26.460 に答える
0

Flex は、同じサービスへの複数のリクエストを処理するための Asynchronous Completion Token デザイン パターンをサポートしています。BlazeDS のドキュメントを参照してください。

于 2009-09-02T19:12:04.357 に答える
0

これを行うには、次の2つの方法しかないと思います。

  • 呼び出しコンテキストごとに個別のリモート オブジェクトを用意します。パフォーマンスへの影響は無視できる IMO です。
  • remoteobject の同時実行性を single (または最初、名前は不明ですが、multiple または last ではない) に設定し、最後に呼び出されたメソッドを識別するために使用できる何らかのフラグを設定します。もちろん、これにより、このリモート オブジェクトでのサーバー呼び出しは一度に 1 回に制限されます。前の呼び出しがまだ結果を返していない場合、呼び出しはすぐに失敗します。

サーバーにアクセスできない場合は、それが唯一の方法です。私があなたの状況にあった場合、リモート呼び出しを行うたびにリモート オブジェクトを作成します。パフォーマンスには影響しないと思います(間違っている場合は修正してください)。幸運を!

于 2009-09-03T12:55:42.657 に答える
0

remoteObject に対して複数のメソッドを持つことができます。

<mx:RemoteObject id="rpt" destination="AMFServer">
    <mx:method name="getSalesStatsToChart" fault="getSalesStatsFault(event)" 
        result = "getSalesStatsToChartSuccess(event)" />
    <mx:method name="getSalesStatsToDataGrid" fault="getSalesStatsFault(event)" 
        result = "getSalesStatsToDataGridSuccess(event)" />
</mx:RemoteObject>

このようなものを使用できない理由はありますか?

于 2009-07-11T23:46:17.250 に答える