当我在浏览器中测试已部署的应用程序时,即使应该关闭弹出窗口,也会继续显示该窗口。在Flash Builder 4中调试时,一切都按预期工作。
目前正在发生以下情况:请求被发送到我的restful Web服务,该服务处理请求,(似乎)ResultEvent
被调用,后者又调度profileEvt
动态事件更改了查看状态。但是,弹出窗口不会关闭,applet会“卡住”。
任何人都知道可能是什么问题?以下是flex applet Web服务事件监听器/处理程序:
webService.addEventListener(ResultEvent.RESULT, function(event:ResultEvent):void
{
var rawData:String = String(event.result);
var profileEvt:DynamicEvent = new DynamicEvent("profileSaved", true);
profileEvt.data = JSON.decode(rawData).profile;
dispatchEvent(profileEvt); // Dispatch profile saved event
_progressPopUp.closePopUp();
dispatchEvent(event); // Dispatch submit profile button clicked
});
webService.addEventListener(FaultEvent.FAULT, function(event:FaultEvent):void
{
Alert.show("Could not create profile; please try again later.\n" + event.message, "Status");
_progressPopUp.closePopUp();
});
var params:Object = {"profile" : profile};
try
{
_progressPopUp = PopUpManager.createPopUp(this, com.profs.ui.components.ProgressPopUp, true);
_progressPopUp.eventSource = webService; // Set source of progress events
webService.send(JSON.encode(params));
}
注意:
com.profs.ui.components.ProgressPopUp
是一个自定义组件;它的代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" layout="absolute" width="300" height="200" showCloseButton="false" title="Status" creationComplete="init()">
<fx:Declarations></fx:Declarations>
<fx:Script>
<![CDATA[
import mx.managers.PopUpManager;
[Bindable] public var eventSource:Object;
private function init():void
{
PopUpManager.centerPopUp(this);
}
public function closePopUp():void
{
PopUpManager.removePopUp(this);
}
public function completionHandler(event:Event):void
{
closePopUp();
}
]]>
</fx:Script>
<mx:ProgressBar id="progressBar" indeterminate="true" mode="event" source="{eventSource}" complete="completionHandler(event)" verticalCenter="0" horizontalCenter="0"/>
</mx:TitleWindow>
答案 0 :(得分:0)
我不熟悉com.profs.ui.components.progressPopUp
组件,但closePopUp()
方法可能存在错误。您可以尝试使用ProgressPopUp
方法直接删除PopUpManager
。例如,而不是:
_progressPopUp.closePopUp();
试
PopUpManager.removePopUp(_progressPopUp);
我也不知道闭包的规则是什么(即将_progressPopUp
变量复制到ResultEvent.RESULT
事件处理程序的哪一点。你可以尝试移动它您实际创建_progressPopUp
实例的行下方的特定事件处理程序。