2009-12-15 2 views
0
package com.services 
{ 

     import com.asfusion.mate.events.ResponseEvent; 
     import com.events.navigation.DesgManagementEvent 
     import flash.events.EventDispatcher;  
     import mx.controls.Alert; 

     public class UserManager extends EventDispatcher 
     { 

      [Bindable] 
      public var addResult:String 

       [Bindable] 
      public var user:User 

      public function UserManager() 
      { 
      } 


      public function addUsersResult(Result:String):void {   
       addResult = Result 
       //Alert.show(event.result.toString()); 
       Alert.show(addResult); 
       backHome(); 
      } 

      private function addUsersFault(event:ResponseEvent):void { 
       Alert.show(event.faultString, "Error Executing Call"); 
      } 


      private function backHome():void { 
       this.dispatchEvent(new DesgManagementEvent(DesgManagementEvent.DES_HOME)); 

      } 

    } 
} 

Je peux obtenir le résultat, mais je ne parviens pas à distribuer l'événement à partir de la classe ActionScript personnalisée. J'ai googlé et obtenu la riposte dont vous avez besoin pour l'ajouter à la liste d'affichage.Diffusion d'événements à partir d'une classe ActionScript

Quelqu'un peut-il comprendre où je me trompe. La méthode backHome n'est pas appelée du tout.

+0

Comment savez-vous vous n'êtes pas en mesure d'expédier l'événement? Est-ce une erreur du compilateur, les auditeurs ne reçoivent rien, ou quoi? –

+0

la méthode backHome n'est pas appelée du tout. – Kevin

+0

Ok, bien, addUsersResult() est appelé? C'est le seul endroit où je vois un appel à backHome(). –

Répondre

1

Je crois que vous prévoyez d'obtenir DesgManagementEvent dans la carte d'événements et parce que vous ne le voyez pas être traité, vous croyez que bakcHome n'est pas appelé.

Comme vous l'avez dit, les événements distribués à partir d'un composant d'objet qui ne figure pas dans la liste d'affichage n'atteindront jamais la carte d'événements. Vous devez passer le répartiteur et l'utiliser pour répartir l'événement. Vous pouvez le passer dans le constructeur (first objectBuilder) ou en tant que propriété (second objectBuilder).

<EventHandlers type="{FlexEvent.INITIALIZE}"> 
    <ObjectBuilder generator="{MyManager}" constructorArguments="{scope.dispatcher}"/> 
    <ObjectBuilder generator="{MyManager2}"> 
    <Properties dispatcher="{scope.dispatcher}"/> 
    </ObjectBuilder> 
</EventHandlers> 

Si vous utilisez le constructeur, il ressemblera à quelque chose comme ceci:

public function MyManager(dispatcher:IEventDispatcher) 
{ 
    this.dispatcher = dispatcher; 
} 

Ensuite, vous utiliserez votre propriété répartiteur pour distribuer l'événement:

dispatcher.dispatchEvent(new DesgManagementEvent(DesgManagementEvent.DES_HOME)); 
0

Etes-vous sûr de recevoir le type Chaîne lorsque vous appelez addUsersResult()?

Questions connexes