2009-06-25 3 views
1

J'ai construit une application de multiplication dans Flex avec différents rôles d'utilisateur. J'utilise une View Stack avec une barre de menu pour naviguer entre les différentes pages.Flex cycle de vie des composants avec les menus - meilleure pratique

Cependant - chaque fois qu'une page est ouverte, j'ai besoin de faire quelques appels de base de données, appliquer des paramètres de rôle utilisateur, etc. dans une fonction init(). Cette fonction init peut référencer certains éléments d'interface utilisateur de cette page.

J'ai essayé de le charger avec l'événement "creationComplete", mais celui-ci n'est déclenché qu'une seule fois (puisque la page n'est pas reconstruite chaque fois que la pile de la vue l'affiche).

Maintenant, je l'ai mis sur l'événement "show", mais cela ne semble pas être déclenché de manière cohérente, ou avant que la page est entièrement créée la première fois.

Quelle est la meilleure pratique pour ce cas? * Je dois passer des données * fonctions d'initialisation d'appel (appels de base de données) * Manipulez composants

Idéalement je besoin d'un moyen d'appeler init chaque fois que la page est chargée et après tous les composants sont créés.

Merci pour votre aide, Martin

Répondre

0

Juste une idée, mais pourquoi ne pas essayer de faire appel à distance sur l'effet du changement ViewStack. Vous pouvez utiliser une interface pour cela que vos vues implémente.

+0

Oui c'est ce que je voulais faire, mais la première fois, lorsque la vue n'a jamais été consulté auparavant, je ne peux pas référencer les enfants de la vue. Ils n'existent pas encore. Seul TabBar a la propriété ayant les enfants d'un conteneur initialisé une fois que l'événement ITEM.CLICK est déclenché. Mais si vous utilisez un Viewstack avec une barre d'onglets, cet événement n'est pas supporté. Je finissais par rejeter l'instant différé, le définissais creationPolicy sur "All" et faisais les appels sur chaque changement de pile de vue. –

+0

Ok. Je me souviens d'avoir eu des problèmes avec ce genre de problème aussi. Je ne possède plus la source mais pour ce dont je me souviens, j'ai utilisé à la fois creationComplete et show effects. La première fois qu'une vue est créée, le gestionnaire creationComplete est exécuté. Appelez la fonction init et définissez une variable creationDone sur true. Dans le gestionnaire d'effets show, vérifiez si creationDone est true et, si c'est le cas, appelez init –

0

Essayez l'événement updateComplete.

Distribué lorsqu'un objet a eu ses méthodes commitProperties(), measure() et updateDisplayList() appelées (si nécessaire).

Ceci est la dernière opportunité de modifier le composant avant qu'il ne soit affiché. Toutes les propriétés ont été validées et le composant a été mesuré et étalé.

+0

Cet événement est déclenché trop souvent, même avant que la page ne soit chargée. –

0

J'ai eu le même genre de problème lorsque j'ai enveloppé le s:Group avec la classe wrapper à mettre à l'intérieur TabNavigator. Le résultat, show show n'est pas appelé. Enfin, j'ai changé tous mes s:Group avec mx:Canvas, les mettre directement dans TabNavigator (La même chose vaut pour ViewStack aussi). Après cet événement creationComplete a été appelé une fois et les visites de page suivantes appeler showmx:Canvas

Questions connexes