2010-12-23 1 views
0

L'état docs Adobe:Flex: Référencer ID de composants dans les modules, viewstacks imbriqués etc

Les ID pour toutes les balises dans un composant MXML, peu importe à quel point imbriqués qu'ils sont, génèrent des variables publiques du composant étant défini. Par conséquent, toutes les propriétés d'ID doivent être uniques dans un document. Cela signifie également que si vous avez spécifié un ID pour une instance de composant, vous pouvez accéder à ce composant depuis n'importe où dans l'application: à partir de fonctions, de fichiers de classe externes, de fichiers ActionScript importés ou de scripts en ligne.

Ce qui est bien si votre demande est contenue dans un tout MXML, mais je vais avoir des ID des composants faisant référence des problèmes dans les modules, puis à l'intérieur ViewStacks/Navigation conteneurs dans un module donné.

Par exemple,

Si je peux faire référence à un module avec FlexGlobals.topLevelApplication.myModule, je ne devrais pas être en mesure de faire référence à un groupe appelé myModulePanel à ce qui suit?

FlexGlobals.topLevelApplication.myModule.myModulePanel 

ou au moins

FlexGlobals.topLevelApplication.myModule.getChildByName(myModulePanel) 

pour des propriétés telles que le titre, la largeur etc? Comme les identifiants de composants sont des variables publiques (selon les docs), je ne pensais pas que je devrais enchaîner une série de fonctions .getChildByName() pour explorer les niveaux de composants/conteneurs pour accéder aux propriétés des composants, mais les méthodes que j'ai essayées ci-dessus ne semblent pas fonctionner.

Mais si c'est le cas, ai-je vraiment besoin de former une longue chaîne de références de composants pour accéder aux enfants de ViewStacks, etc., et quelle est la meilleure façon d'inspecter cette hiérarchie?

Toutes les suggestions seraient grandement appréciées.

Merci.

Répondre

0

Vous devez créer une interface pour chaque module (ou une interface principale à laquelle tous vos modules sont abonnés), en définissant les méthodes qui doivent être appelées en dehors des modules. De cette façon, vous interagissez avec l'interface, pas le module lui-même, mais les méthodes d'interface servent de médiateur entre les classes de modules et l'application principale. L'utilisation de l'interface IModuleInfo chargée par ModuleManager devrait vous aider à y arriver. Voir this page pour plus d'informations. Notez que vous pouvez toujours créer vos propres interfaces qui vous donnent le contrôle sur les modules spécifiques et leurs méthodes et propriétés. Par exemple, j'ai récemment créé une interface qui renvoie une référence à deux composants (qui sont des instances de Group mais jette comme UIComponent):

package main.flex.interfaces 
{ 
    import flash.events.Event; 
    import flash.events.IEventDispatcher; 

    import mx.core.UIComponent; 

    public interface IMyModuleName extends IEventDispatcher 
    { 
     function get mainGroup():UIComponent; 

     function get buttonRow():UIComponent; 

     function init(event:Event):void; 

    } 
} 

Dans les modules eux-mêmes, puis, accéder aux propriétés mainGroup ou buttonRow de l'interface renvoie le groupe nommé, tel que

public function get mainGroup() : UIComponent { 
    return someGroup; 
} 

...Elles sont simplifiées et n'utilisent pas les ID réels, mais vous devriez pouvoir leur en donner l'idée.

Questions connexes