2

Web サービスの呼び出しなどの長時間実行される操作のために、Flex アプリケーションの「しばらくお待ちください」コントロールを作成する賢い方法は何でしょうか。

私はそれのグラフィカルな部分について尋ねているのではなく、「コントローラー」の部分だけです。どのようにトリガーして非表示にする必要がありますか。テキストを含む単純なキャンバスを作成する予定です。

例えば ​​:

  • どうにかしてすべての Web サービス呼び出しをインターセプトできますか - すべての Web サービスに対してアクティブ化する必要はありません
  • キャンバスに追加するにはどうすればよいですか。最上位コンポーネントとして「ステージ」に追加する必要がありますか?
  • 時間がかかりすぎる場合に Web サービス要求をキャンセルするための「キャンセル」ボタンが必要です。実行中の非同期 Web 要求を終了できるかどうかさえわからないので、それはちょっと複雑に聞こえますか?

参考までに: これはレポート アプリケーション用であるため、長時間実行されるクエリが予想されます。

4

2 に答える 2

1

私が過去に行った 1 つの方法は、グローバル整数を使用して、実行中の Web サービスに基づいて値を増減することです。カウンターが 0 のときは読み込み中のテキストを非表示にし、0 より大きいときは読み込み中のテキストを表示します。これを簡略化したバージョンを次に示します。


<mx:Application>
    <mx:Script>
        [Bindable]public var ws_count:int = 0;
    </mx:Script>
    <mx:Label text = "loading..." visible="{ws_count > 0}" />
</mx:Application>


次に、グローバル カウンターを制御するための小さなヘルパー クラスを用意しました。


package ws {
    import mx.core.Application;
    public class WSCounter {
        public static function sent():void {
            Application.application.ws_count += 1;
        }
        public static function receive():void {
            Application.application.ws_count -= 1;
        }
    }
}

あとは、Web サービスが呼び出されたときにヘルパー関数を呼び出すだけです...例:


import ws.WSCounter;
import mx.rpc.http.HTTPService;

var srv:HTTPService = new HTTPService();
srv.url = "http://localhost/service.py";
srv.addEventListener(ResultEvent.RESULT,function(event:ResultEvent):void {
    WSCounter.receive();
});
srv.send();
WSCounter.sent();

サービスが実行されているかどうかを検出するための何らかのタイプのフックがあるとあなたが言ったように、私はいつもこれを行うためのより良い方法があると思っていました...私はこの投稿で他の応答を楽しみにしています...

于 2008-11-19T14:57:34.893 に答える
0

MVC を実装する Cairngorm などのフレームワークを使用している場合、簡単な方法は、UI コンポーネント (つまり、メイン mxml の下の titleWindow など) の可視属性にバインドされた「グローバル」変数を (Singleton オブジェクトを介して) 更新することです。変数は、execute() 中に true に更新され、result または fault コールバック メソッドに到達すると false に更新されます。
変数を「false」にリセットする「キャンセル」ボタンを追加できますが、サーバーが非同期呼び出しを停止するわけではありません。それを停止して、キャンセルされたメソッド呼び出しからデータを返さないようにする方法がわかりません。ASDoc をざっと見てみると、remoteobject には保留中のリクエスト レスポンダーをすべて破棄する disconnect() メソッドがあります。それがエレガントで正しい方法かどうかはわかりません
Web サービスの呼び出しごとに設定したくない場合は、カスタム イベント チェーン (アイデアについてはhttp://www.herrodius.com/blog/80を参照) を使用することをお勧めします。単一または複数のサービスを呼び出しています。

于 2008-11-21T23:15:20.393 に答える