假设我在Singleton模式中有一个NetConnection对象,它在我的所有应用程序中与所有数据访问对象类共享。现在,你进入了一个屏幕并要求加载5千条记录,因为你想搜索一些错误或其他什么。但是现在你刚刚意识到你在错误的屏幕上,而你实际上想要来自另一个“实体”的5千条记录。如何防止您必须等待近2分钟,直到数据到达此处,以便您可以转到另一个屏幕并询问一些不同的数据?我尝试使用ESC按钮作为NetConnection.close()
事件的键调用者,但它实际上不起作用。它只是调度一个空事件,然后调用仍然返回。我知道我不能要求服务器不要继续做他的工作,但我想知道如何确保在你按下ESC或类似的东西后,ActionScript将不再打扰那个特定的调用你可以继续你的生活。并且,当服务器响应该呼叫时,在后台,我将把它丢弃,因为你已经同意取消它。
Ps。:我对如何收听ESC按钮并通过它调用一些方法没有任何疑问,我只想知道一旦用户决定不再接收该数据就应该调用什么并且他/她想继续前进而无需关闭应用程序并再次打开。
编辑:
我试图在拨打电话后销毁Responder对象,但它没有用。
public function call(command:String, f:Function, fault:Function, ...parameters):void{
var r:Responder = new Responder(f, fault);
this._Responder = r;
if(parameters.length == 0)
GATEWAY.call(command, _Responder);
else
GATEWAY.call(command, _Responder, parameters);
}
public function close():void{
_Responder = new Responder(function(obj:Object):void{}, function(obj:Object):void{});
//_Responder = null;
trace("Canceled");
}
使用此处描述的代码,我停止调用NetConnection::call
并开始调用我编写的“调用函数”。所以这个函数会构建一个响应者,它将在类范围内,所以即使在调用完成后我也可以访问它,并且ESC按钮会调用“关闭”函数。我尝试将其设置为null并重新构建它。它没用。
我认为在NetConnection拨打电话后,无法更改响应者。
答案 0 :(得分:0)
NetConnection类不支持取消AMF调用。但是,就像shaunhusain所说,你可以保留从你的单例类中调用的方法的存储(数组,字典等),一旦你取消一个调用,它应该只为那个调用禁用结果事件监听器。
因此,即使你退出等待AmfCall结果的模块,你的单例类也不会有回调,你可以继续下一个屏幕。
public class Call
{
var responder:Responder;
var service:String;
var params:Array;
public function Call(service:String, params:Array)
{
responder = new Responder(this.onResult, this.onFault);
this.service = service;
this.params = params;
}
public function removeListeners():void
{
removeEventListener(CallEvent.RESULT, onResult);
}
public function onResult(result:Object):void
{
this.result = result;
dispatchEvent(new CallEvent(CallEvent.RESULT, callId, result));
}
}
Call类负责在接收结果时调度事件。但是,如果没有事件侦听器,则任何类都不会侦听调度的事件。
此代码段取自AmfPhpToolBox。您可能希望使用该库来解决所有这些问题。