部署的flex applet不处理Web服务结果

时间:2010-11-20 16:08:19

标签: flex actionscript-3

当我在浏览器中测试已部署的应用程序时,即使应该关闭弹出窗口,也会继续显示该窗口。在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>

1 个答案:

答案 0 :(得分:0)

我不熟悉com.profs.ui.components.progressPopUp组件,但closePopUp()方法可能存在错误。您可以尝试使用ProgressPopUp方法直接删除PopUpManager。例如,而不是:

_progressPopUp.closePopUp();

PopUpManager.removePopUp(_progressPopUp);

我也不知道闭包的规则是什么(即将_progressPopUp变量复制到ResultEvent.RESULT事件处理程序的哪一点。你可以尝试移动它您实际创建_progressPopUp实例的行下方的特定事件处理程序。