2010-11-20 3 views
1

Lorsque je teste mon application déployée dans un navigateur, la fenêtre contextuelle continue à s'afficher même après sa fermeture. Tout fonctionne comme prévu lorsque débogué dans Flash Builder 4.L'applet Flex déployée ne traite pas les résultats du service Web

Après est actuellement ce qui se passe: la demande est envoyée à mon service Web reposant, qui traite la demande, (apparemment) le ResultEvent est appelé qui à l'ordre du tour du profileEvt dynamique événement qui modifie l'état d'affichage. Cependant, la fenêtre contextuelle ne se ferme pas et l'applet est bloquée.

Quelqu'un sait quel pourrait être le problème? Voici les événements du service Web applet flex auditeurs/gestionnaires:

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)); 
        } 

REMARQUE: com.profs.ui.components.ProgressPopUp est un composant personnalisé; le code est ci-dessous:

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

Répondre

0

Je ne connais pas avec le composant com.profs.ui.components.progressPopUp, mais il est possible que la méthode closePopUp() a un bogue. Vous pouvez essayer d'enlever le ProgressPopUp directement en utilisant la méthode PopUpManager. Par exemple au lieu de:

_progressPopUp.closePopUp(); 

essayer

PopUpManager.removePopUp(_progressPopUp); 

Je ne sais pas non sur le dessus de ma tête ce que les règles de fermeture sont (c.-à quel point est la variable _progressPopUp copié dans le Gestionnaire d'événements ResultEvent.RESULT Vous pouvez essayer de déplacer ce gestionnaire d'événements particulier en dessous de la ligne où vous avez créé l'instance _progressPopUp