IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flex Discussion :

TabNavigator - Initialisation du contenu


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    554
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 554
    Par défaut TabNavigator - Initialisation du contenu
    Bonjour à tous,

    J'ai un TabNavigator avec plusieurs onglets. Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <mx:TabNavigator height="190" width="100%" id="tabNavigator">
    			<s:NavigatorContent label="Moulures" width="100%" height="100%" textAlign="center">
    				<views:ListView dataProvider="{moulArray}">
     
    				</views:ListView>
    			</s:NavigatorContent>
    			<s:NavigatorContent label="Magnets" width="100%" height="100%">
    				<views:ListView allowMultipleSelection="true" dataProvider="{magnArray}">
     
    				</views:ListView>
    			</s:NavigatorContent>
    		</mx:TabNavigator>
    Le problème c'est que le ListView "Magnets" n'est créé que quand je clique sur l'onglet "Magnets".

    J'aimerai donc savoir si il était possible d'initialiser le contenu sans avoir à cliquer dessus ?

    Car j'ai des images dans ces listes view, et elles sont chargées seulement quand on affiche l'onglet.

    Merci d'avance pour votre aide

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    Salut,

    dans ton composant ListView, as-tu du code qui s'éxecute sur l'event 'creationComplete' ( par exemple, initialisation de tes variables, childs etc..) ? en gros du code responsable de la création de ton composant ?
    Si c'est le cas, tu peux utiliser plutôt les event 'initialize' ou même 'preinitialize'.

    Ça peut être une piste.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    554
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 554
    Par défaut
    Oui tout s'exécute dans creationComplete(). J'ai découvert la fonction initialize et j'essaye de l'exécuter sur mon composant ListView mais j'ai une exception pour un pointeur null. Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <mx:TabNavigator height="190" width="100%" id="tabNavigator">
    			<s:NavigatorContent label="Moulures" width="100%" height="100%" textAlign="center">
    				<views:ListView dataProvider="{moulArray}">
     
    				</views:ListView>
    			</s:NavigatorContent>
    			<s:NavigatorContent label="Magnets" width="100%" height="100%">
    				<views:ListView id="myMagnet" allowMultipleSelection="true" dataProvider="{magnArray}">
     
    				</views:ListView>
    			</s:NavigatorContent>
    		</mx:TabNavigator>
    J'ai donc rajouter l'ID pour la ListView "Magnets". Le problème c'est que quand j'exécute l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myMagnet.initialize();
    J'ai une exception à l'exécution, apparemment le pointeur est null. En déboguant j'ai remarqué qu'il n'était plus null une fois que je l'ai ouvert au moins une fois.

    Existe-t-il une solution pour "simuler" cette ouverture d'onglet ?

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Par défaut
    La solution est dans la propriété creationPolicy.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    554
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 554
    Par défaut
    Merci pour l'info, je crois que j'y suis presque.

    Quand je mets la propriété creationPolicy à "all", il n'y a que le premier élément des autres ListView qui s'initialise. J'ai donc effectué un debug complet pour voir l'ordre de création.

    Ci-dessous, ItemView est le ItemRenderer utilisé dans mes lists, j'ai donc une fonction init() dans ceux-ci. J'ai mis des breakpoints, dans le init du ItemView et de ma ListView.

    Dans la structure j'ai mes deux ListView ("Moulures" et "Magnets"). Respectivement je les appellerai 1 et 2.

    Dans ListView 1 j'ai 3 ItemView. Dans ListView 2 j'ai 2 ItemView.

    Quand creationPolicy est à "auto" (par défaut), l'ordre d'exécution des init() est le suivant:

    + ItemView 1 de la ListView 1
    + ItemView 1 de la ListView 1
    + ItemView 2 de la ListView 1
    + ItemView 3 de la Listview 1

    + ListView 1

    Ce qui est normal. Et quand je clique sur la deuxième ListView, elle s'exécute correctement.

    Par contre avec creationPolicy à "all", voici l'ordre:

    + ItemView 1 de la ListView 2
    + ItemView 1 de la ListView 1
    + ItemView 1 de la ListView 1
    + ItemView 2 de la ListView 1
    + ItemView 3 de la Listview 1

    + ListView 1
    + ListView 2

    Donc il n'y a que le premier élément de la deuxième ListView qui est initialisé. Le deuxième est initialisé quand je clique sur la ListView...

    Apparemment la propriété creationPolicy n'est plus utilisé dans la classe Spark. Ce qui voudrait dire qu'elle n'influence pas le contenu des ListViews. Et ce qui expliquerait ce comportement.

    Mais comment faire dans ce cas là ?

    Connaissez-vous une autre propriété permettant de forcer l'initialisation ?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Par défaut
    Apparemment la propriété creationPolicy n'est plus utilisé dans la classe Spark.
    Qu'est ce qui te fais dire cela ???

    http://help.adobe.com/en_US/flex/usi...9084-7cb8.html

Discussions similaires

  1. Initialiser element contenu dans un onglet
    Par claire34 dans le forum Flex
    Réponses: 2
    Dernier message: 08/02/2010, 16h10
  2. initialiser le contenu d'un TextEditor
    Par michelp38 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 31/10/2007, 09h53
  3. Réponses: 9
    Dernier message: 22/06/2007, 17h33
  4. [DOM] nodeValue et firstChild pour initialisation de contenu texte
    Par Hibou57 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 21/06/2007, 18h41
  5. Réponses: 10
    Dernier message: 16/05/2006, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo