我有一個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(假),並且會自動啓用所有按鈕。
如果它是一個Spark應用程序,你可以在'Application'類創建一個自定義皮膚,去除一部分說:'alpha.disabled =「0.5」' – RIAstar
謝謝RIAstar。您知道,有一個'mx.core.FlexGlobals.topLevelApplication.alpha'設置,但如果將其設置爲1,則應用程序處於禁用狀態時不起作用。 – ggkmath
這是'Application'實例的'alpha',而不是它的皮膚。你可以設置'FlexGlobals.topLevelApplication.skin.alpha',但即使如此,我猜這個值在皮膚狀態改變時仍然會被覆蓋。你必須在皮膚的currentStateChange事件之後設置它,但這看起來很醜陋。 – RIAstar