开发者

Deployed flex applet not processing web service results

When I test my deployed app in a browser the popup window continues to be displayed even after it should be closed. Everything works as expected when debugged in Flash Builder 4.

Following is currently what's happening: the request is sent to my restful web service, which processes the request, (seemingly) the ResultEvent is called which in turn dispatches the profileEvt dynamic event that changes the view state. However, the popup window does not get closed and the applet gets 'stuck.'

Anyone know what could be the problem? Below are the flex applet web service event listeners/handlers:

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");
                        _p开发者_StackOverflow社区rogressPopUp.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));   
                    }

NOTE: com.profs.ui.components.ProgressPopUp is a custom component; the code for it is below:

<?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>


I am not familiar with the com.profs.ui.components.progressPopUp component, but it is possible that the closePopUp() method has a bug in it. You could try to remove the ProgressPopUp directly using the PopUpManager method. For example instead of:

_progressPopUp.closePopUp();

try

PopUpManager.removePopUp(_progressPopUp);

I also don't know off the top of my head what the rules for closures are (i.e. at which point is the _progressPopUp variable copied into the ResultEvent.RESULT event handler. You could try moving that particular event handler below the line where you actually created the _progressPopUp instance.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜