2011-08-30 3 views
0

J'essaie actuellement d'utiliser la nouvelle approche d'utilisation de FlexGlobals pour accéder à une ArrayCollection que j'ai dans la vue par défaut d'une application mobile que je développe. Voici le code qui fait la création et la population de ce tableau sur la vue par défaut qui se produit dès que l'application est lancée:Vous souhaitez utiliser FlexGlobals pour accéder à ArrayCollection?

private var ids:ArrayCollection = new ArrayCollection(); 

      private function loop():void 
      { 
       var index:int; 
       for(index = 0; index < compsCollection.length; index++) 
       { 
        trace("Element " + index + " is " + compsCollection[index].comp_id); 
        trace(ids.length); 
        ids.addItem(compsCollection[index].comp_id);      
       }    
      } 

Maintenant, quand ce code est exécuté je peux voir clairement à partir de la console que le "ids" ArrayCollection est rempli correctement. Maintenant, sur une vue différente dans l'application, je veux accéder à ces données et l'utiliser pour diverses choses. Je l'ai utilisé le code ci-dessous pour essayer d'accéder aux données pour la ArrayCollection:

protected var ids_list:ArrayCollection = new ArrayCollection(); 

protected function view1_viewActivateHandler(event:ViewNavigatorEvent):void 
      {    
       var obj:Object = FlexGlobals.topLevelApplication.parameters;  
       ids_list.source = obj.ids;    
       trace(ids_list.length);     
      } 

Quand j'ai essayé ce je ne suis pas une erreur mais le retour relevé de trace « 0 ». J'ai donc également essayé:

protected function view1_viewActivateHandler(event:ViewNavigatorEvent):void 
      {    
       ids_list.source = FlexGlobals.topLevelApplication.parameters.ids;    
       trace(ids_list.length);     
      } 

Qui a de nouveau renvoyé "0" dans l'instruction trace. J'ai finalement essayé ceci pour voir si cela fonctionnerait:

protected function view1_viewActivateHandler(event:ViewNavigatorEvent):void 
      {    
       ids_list.source = FlexGlobals.topLevelApplication.ids;    
       trace(ids_list.length);     
      } 

Quand j'ai essayé cela et naviguais à la vue où ce code serait initated je suis arrivé cette erreur:

Error #1069: Property ids not found on Main and there is no default value. 

Je ne pouvais supposer que la collection ArrayCollection que j'avais créée dans ma vue par défaut n'a pas de valeur une fois que je m'en suis éloigné. Y at-il de toute façon quelqu'un peut m'aider s'il vous plaît à ce sujet car il semble y avoir presque aucune documentation sur la façon de faire ce genre de choses avec FlexGlobals? Merci

Répondre

1

You can't access a private property, try it

/* 
Replace 

private var ids:ArrayCollection = new ArrayCollection(); 

by 
*/ 

private var _ids:ArrayCollection = new ArrayCollection(); 
public set ids(value:ArrayCollection):void{ 
_ids = value; 
} 

public get ids():ArrayCollection{ 
return _ids 
} 
0

Il est extrêmement mauvais pour un composant enfant de savoir quoi que ce soit sur la structure de son parent/ancêtre. Cela étant dit, la raison pour laquelle vous ne pouvez pas voir la valeur de la variable membre de l'application est parce que vous l'avez rendue privée. Si vous voulez qu'il soit visible en dehors de sa propre portée, vous devez le rendre public.

+0

Pour en savoir plus sur les raisons pour éviter l'état global, consultez http://misko.hevery.com/code-reviewers-guide/flaw-brittle-global-state-singletons/ –

0

Passez l'ArrayCollection en tant que propriété à votre vue depuis l'application principale.

Questions connexes