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 :

Variable dynamique dans un repeater


Sujet :

Flex

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Février 2012
    Messages : 69
    Points : 60
    Points
    60
    Par défaut Variable dynamique dans un repeater
    Bonsoir,

    Voila, j'utilise un repeater dans mon code, et je voudrais mettre une variable à jour à chaque récursion.
    Mais dans un premier temps, même en faisant ce test simple, ma variable n'est apparement pas mis à jour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <mx:Repeater id="myRepeater" dataProvider="{arrColl}" 
                 repeat="currentGroup = myRepeater.currentItem.category; Alert.show(currentGroup);">
    	<mx:Label id="category" text="{currentGroup}"/>
    </mx:Repeater>
    Néanmoins, dans mon Alert.show, mon affichage change bien selon la variable !!!
    Du coup je ne comprends pas bien pourquoi ma variable "currentGroup" n'est plus affectée comme il faut à ligne d'en dessous.

    Merci d'avance pour le coup de main.

    PS : Ma variable "currentGroup" est déclarée de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Bindable] private var currentGroup:String;

  2. #2
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <mx:Repeater id="myRepeater" dataProvider="{arrColl}" 
                 repeat="currentGroup = myRepeater.currentItem.category; Alert.show(currentGroup);">
    	<mx:Label id="category" text="{myRepeater.currentItem.category}"/>
    </mx:Repeater>
    devrait marcher. En effet, c'est logique que cela t'affiche ta dernière valeur de ton ArrayCollection.

    Itérons ensemble sur un ArrayCollection contenant les valeurs de catégories "cat1", "cat2" et "cat3"

    1ère itération :
    • catégorie lue : "cat1"
    • Alert.show affiche : "cat1"
    • text du label affiche : "cat1"


    2ième itération :
    • catégorie lue : "cat2"
    • Alert.show affiche : "cat2"
    • text du label affiche : "cat2" mais text du label de la première itération remis à jour avec la valeur "cat2" -> Bindable



    3ième itération :
    • catégorie lue : "cat3"
    • Alert.show affiche : "cat3"
    • text du label affiche : "cat3" mais text du label de la première itération remis à jour avec la valeur "cat3" -> Bindable + idem pour la valeur du text du label de la 2ième itération


    Sortie de boucle : tous tes text de label valent la dernière valeur. Tes text étant bindés sur une variable Bindable, ils ne peuvent avoir à un instant T qu'une seule valeur unique

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Février 2012
    Messages : 69
    Points : 60
    Points
    60
    Par défaut
    Déjà merci à toi pour tes réponses à mes diférents "sujets", et pour ta réactivité .

    Pour en revenir à ce que tu dis, d'après ce que je comprends, c'est qu'en fait "l'affichage" des composants d'un repeater est fait une fois que "la boucle" est terminée ?
    Et c'est pour cela que ma variable (en l'occurrence) "currentGroup" est bindé sur la dernière valeur, à savoir la chaine vide dans mon cas ?

    En fait, pour en revenir à mon problème, ce que je voudrais faire lors des itérations du repeater, c'est pouvoir "comparer" la catégorie courante avec la catégorie précédente (celle de l'itération n-1), ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <mx:Repeater id="menuRepeater" dataProvider="Plat.getInstance().platsOfRestaurant}">
       <mx:Label id="categoryPlat" text="{menuRepeater.currentItem.category}s" 
                  visible="{(menuRepeater.currentItem.category != menuRepeater.(previousItem).category) ? true : false}"/>
    </mx:Repeater>
    Y a t-il moyen de faire cela à l'aide d'un repeater ?

    PS : Sinon au départ je comptais le faire en ActionScript, dans une fonction (ex : displayComponents). Mais à quel moment appeler cette fonction pour qu'elle soit exécutée a chaque fois que mon dataProvider change ?

    Merci d'avance

  4. #4
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Salut,

    en fait il faut bien que tu comprennes la metadata [Bindable] et ce qu'elle implique.

    Lorsque tu changes de valeur pour une variable annotée par [Bindable], toutes les références à cette variables dans les composants seront changés. Ainsi, ton repeater affichera :

    cat1

    puis

    cat2, cat2

    puis cat3, cat3, cat3

    mais toi tu ne verras bien sur que cat3, cat3, cat3. Avec ta configuration actuelle, pour faire simple, tu ne peux pas avoir 2 Labels avec une valeur text différente.

    Pour ton soucis de comparer n à n-1, tu peux le faire en déclarant des variables mais non annotées par Bindable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    [Bindable] private var a:ArrayCollection = new ArrayCollection([
    																				{data:25},
    																				{data:10},
    																				{data:67}, 
    																				{data:17}, 
    																				{data:28}, 
    																				{data:1}
    																				]);
     
    private var n:Number;
    private var nMoinsUn:Number;			
     
     
    protected function r_repeatHandler(event:FlexEvent):void
    {
    	var actuel:Number = Number(Repeater(event.target).currentItem.data);
     
    	if(isNaN(nMoinsUn))
    	{					
    		nMoinsUn = actuel;
    		trace("Premiere valeur : " + nMoinsUn);
    		return;
    	}
     
    	trace("Actuel : " + actuel + "~~~~~~ N moins 1 : " + nMoinsUn);
     
    	nMoinsUn = actuel;				
    }
     
    <mx:VBox>	
    	<mx:Repeater id="r" dataProvider="{a}" repeat="r_repeatHandler(event)" />	
    </mx:VBox>
    Premiere valeur : 25
    Actuel : 10~~~~~~ N moins 1 : 25
    Actuel : 67~~~~~~ N moins 1 : 10
    Actuel : 17~~~~~~ N moins 1 : 67
    Actuel : 28~~~~~~ N moins 1 : 17
    Actuel : 1~~~~~~ N moins 1 : 28
    A voir ton besoin réel, mais y'a peut être plus simple que d'utiliser un repeater, à voir

Discussions similaires

  1. Afficher une variable dynamique dans la barre des taches de windows
    Par mustang-ffw02 dans le forum Windows Forms
    Réponses: 16
    Dernier message: 27/05/2007, 23h24
  2. [RegEx] utiliser une variable variable (dynamique) dans preg_replace
    Par thibs44 dans le forum Langage
    Réponses: 1
    Dernier message: 18/01/2007, 11h29
  3. Réponses: 4
    Dernier message: 19/05/2006, 14h30
  4. Enregistrement d'une variable dynamique dans un fichier
    Par zarbydigital dans le forum Langage
    Réponses: 13
    Dernier message: 24/12/2005, 21h28
  5. variable dynamique dans une fonction javascript
    Par Shivaneth dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/04/2005, 15h58

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