0

情報を得るためにサーバーへの特定の呼び出しに対して、アプリケーションとのユーザー操作を無効にするメソッドが必要です。サーバー呼び出しの前後にアプリケーションを無効/有効にするために、次のコードを使用しています。基本的に、サーバーで呼び出しが処理されている間、ユーザーにビジーカーソルを与え、アプリケーションを無効にします。

サーバーからの呼び出しが送信されると、次のように実行します。

CursorManager.setBusyCursor(); 
mx.core.FlexGlobals.topLevelApplication.enabled=false;

サーバーからの呼び出しが戻ったら、次のように実行します。

CursorManager.removeBusyCursor(); 
mx.core.FlexGlobals.topLevelApplication.enabled=true;

これには、アプリケーションの色が暗くなるという問題があります。調光を防ぐ方法はありますか?または、どういうわけかマウスクリックとキーボードを無効にすることはできますか?または、この状況で他の人は何をしますか?

4

4 に答える 4

3

試す:

// in your method
const stage:Stage = mx.core.FlexGlobals.topLevelApplication.stage;
if (stage)
  stage.mouseChildren = false; // or true of course
于 2012-06-13T14:18:52.733 に答える
1

すべての呼び出しを行うAMFConnectorクラスがあります。このクラスが呼び出しを行うたびに、カーソルがビジーモードに設定され、ブールプロパティがtrue(amf_busy)に設定されます。私のすべてのアプリケーションは、呼び出し/コマンドを行うアクティブ/非アクティブボタンにそのプロパティを使用するように構築されています。あなたの解決策はより速くそしてより簡単です、しかしあなたが述べたように、それは画面全体をフェードさせ、そしてそれはあまりユーザーフレンドリーではありません。ユーザーは、アクションを実行するとボタンだけがフェードすることを確認すると、クライアントサーバー呼び出しを理解していなくても、サーバーが応答を返すまで待機する必要があることを自動的に認識します。

編集:マウス/キーボードを無効にすることに関しても、それはあまりユーザーフレンドリーではありません。そのソリューションを使用する場合は、ユーザープロファイルに注意する必要があります。ユーザーは、何が起こっているのか理解していないため、「キーボード/マウスが「明らかに理由もなく」機能しなくなることがあります」と表示される可能性があります。

編集II:BlazeDSがどのように機能するかわからないので、私自身の例を使用し、それを翻訳してみてください。

単純な呼び出しは次のようになります。

//creating a object connection.
var gateway:NetConnection = new Netconnection();
//connect
gateway.connect(url_connection_here);
//Making a simple call
gateway.call("UserController/GetUser", new Responder(onResult, onfault));

これはあなたがすることです:

呼び出しを受信するためのゲートウェイを作成します。

[Bindable] public class AMFConnctor{
      private var instance:AMFConnector = new AMFConnector();

      public function getInstance():AMFConnector{
          return instance;
      }

      public function AMFConnector(){
          if(instance){
            throw new Error("Singleton class cannot be instanced. Use getInstance() method instead.");
          }
      }

      private var _amf_busy:Boolean = false;        
      public function get amf_busy():Boolean{
             return _amf_busy;
      }

      public function set amf_busy(value:Boolean):void{
             //If you are setting to true (yes, it's busy)
             if(value){
                CursorManager.setBusyCursor();
                _amf_busy = true;
             }else{
                _amf_busy = false;
                CursorManager.removeBusyCursor();
             }
      }

      //Here I assume that everytime that I ask this class for the gateway
      //it's because I'm going to make a call, which means that I want the
      //rest of the application knows that AMF is currently busy.
      public function get Gateway():NetConnection{
           amf_busy = true;
           return this._gateway;
      }
}

同様にこのようなゲートウェイがある場合は、ボタンを簡単に構成できるようになりました。

<mx:Button id="btnSubmit1" label="Submit" click="action" icon="@Embed(source='images/ok.png')"  enabled="{!AMFConnector.getInstance().amf_busy}"/>
<mx:Button id="btnCancel1" label="Cancel" click="action" icon="@Embed(source='images/cancel.png')" enabled="{!AMFConnector.getInstance().amf_busy}"/>

ここで、確認する必要があるのは、サーバー側が呼び出しを返した後に呼び出される'onResult'関数内で、amf_busyプロパティをOff(false)に設定していることを確認する必要があることだけです。これにより、すべてのボタンが自動的に有効になります。

于 2012-06-13T14:19:51.640 に答える
1

私のために働くもの...

private var _lastFocusedElement:InteractiveObject;

private function set enabled(value:Boolean):void {
    value ? CursorManager.removeBusyCursor(): CursorManager.setBusyCursor();
    var stage:Stage = FlexGlobals.topLevelApplication.stage;
    if (stage) {
        stage.mouseChildren = value;
        stage.tabChildren = value;
        if (!value)
            _lastFocusedElement = stage.focus;
        stage.focus = value ? _lastFocusedElement : null;
    }
}

よろしく、Vjeko

于 2013-05-27T13:48:42.090 に答える
0

ここに簡単な解決策があります:-

protected static function toggleScreenClick (value : Boolean) : void

    {

        if (value)
        {
            FlexGlobals.topLevelApplication.setStyle("disabledOverlayAlpha", 0.5);
        }
        else
        {
            FlexGlobals.topLevelApplication.setStyle("disabledOverlayAlpha", 0.0);
        }
        FlexGlobals.topLevelApplication.enabled = value;
    }
于 2015-01-16T06:16:55.220 に答える