すべての呼び出しを行う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)に設定していることを確認する必要があることだけです。これにより、すべてのボタンが自動的に有効になります。