我有一个 AMFConnector 类可以拨打我的所有电话。每次此类调用时,它都会将光标设置为忙碌模式并将布尔属性设置为 true (amf_busy)。我所有的应用程序都是为了使用该属性来激活/取消激活调用/命令的按钮。您的解决方案更快更容易,但正如您所说,它会淡化整个屏幕并且它不是非常用户友好。现在当用户看到当他做出一个动作时,只是按钮消失了,他会自动意识到他现在必须等待服务器返回答案,即使他不理解客户端-服务器调用。
编辑:至于禁用鼠标/键盘,它也不是很友好。如果您使用该解决方案,则必须小心用户配置文件。用户可能会看到“有时”键盘/鼠标“显然无缘无故”停止工作,因为他不明白发生了什么。
编辑二:由于我不知道 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) 和这将自动启用所有按钮。