Question

Mon projet actuel (une application Flex exécutée dans Flash Player) doit afficher un sous-ensemble arbitraire de composants sur une fiche tout en masquant tous les autres composants en fonction de certains aspects de l'état de l'application. Il y a environ une douzaine de zones de texte et de menus déroulants différents, mais certains deviennent non pertinents en fonction des données utilisateur saisies précédemment et nous ne voulons pas les afficher lorsque nous obtenons ce formulaire particulier. Chaque fois que ce formulaire est affiché, je pourrais avoir besoin de montrer l'une des nombreuses permutations de ces composants.

J'essaie de décider quelle est la meilleure façon d'aborder ce problème. Devrais-je créer un canevas (ou un autre conteneur) avec tous les contrôles nécessaires et ensuite définir visible = false sur ceux dont je n'ai pas besoin? Le problème devient alors de s'assurer que la mise en page est correcte. Je ne veux pas qu'il y ait des lacunes là où les contrôles cachés auraient été.

L’autre option à laquelle j’ai pensé est d’avoir un mécanisme qui pourrait instancier de manière dynamique le composant TextInput ou CheckBox, puis appeler container.addChild (contrôle) afin de construire les composants sans avoir à s’inquiéter de la problème d'écart.

Cela semble être un problème qui a une solution idiomatique en flex, mais je ne sais pas ce que c'est. Aucune de ces idées ne semble super, alors je me demande si quelqu'un d'autre a une meilleure idée.

Était-ce utile?

La solution

Je ne sais pas si c'est une bonne solution ou non, mais lorsque j'étais exactement dans la même situation, j'ai utilisé votre première méthode. Définissez visible = false et définissez également includeInLayout = false pour éviter ces "écarts". vous parliez de. C'est une solution très simple, très facile et rapide à mettre en œuvre ... peut-être que quelqu'un d'autre sait quelque chose de plus idiomatique.

Autres conseils

La meilleure pratique consiste à utiliser des états. Par exemple:

<mx:states>
    <mx:State name="State1">
        <mx:AddChild position="lastChild">
            <components.../>
        </mx:AddChild>
    </mx:State>
    <mx:State name="State2">
        <mx:AddChild position="lastChild">
            <mx:Canvas.../>
        </mx:AddChild>
        <mx:AddChild position="lastChild">
            <mx:VBox.../>
        </mx:AddChild>
    </mx:State>
</mx:states>

Ensuite, dans votre code, vous appelez this.currentState = " State1 " pour activer le premier état, etc. À l’aide des états, vous pouvez afficher et masquer les composants de manière sélective.

Je vous recommande de rechercher des didacticiels sur les états flexibles dans Google et d'essayer certains d'entre eux pour bien comprendre le fonctionnement des états.

Si les États ne le font pas, consultez les articles qui expliquent le cycle de vie des composants.

Si vous créez une classe qui étend un composant flex tel que Canvas, vous définissez tous les composants d'une fonction qui redéfinit createChildren. Vous allez revoir la mise en page dans une autre fonction qui redéfinit updateDisplayList

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top