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 :

Nom de variable dynamique


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 Nom de variable dynamique
    Bonjour,

    Voilà, dans mon appli Flex, j'ai une grille dans laquelle, sur clic de chaque cellule j'appelle une seule et même fonction : maFonction(day:String, moment:String, event);

    Ce que je fais actuellement dans cette fonction pour gérer mes différentes cellules est :
    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
    34
    35
    36
    37
    38
    39
     
    switch (day)
    {
    	case 'Lundi' :
    		if (moment == 'matin') { lundi_matin_selected = ! lundi_matin_selected; heures_vbox.visible = (lundi_matin_selected == true) ? true : false }
    		if (moment == 'midi') { lundi_midi_selected = ! lundi_midi_selected; heures_vbox.visible = (lundi_midi_selected == true) ? true : false }
    		if (moment == 'soir') { lundi_soir_selected = ! lundi_soir_selected; heures_vbox.visible = (lundi_soir_selected == true) ? true : false }
    		break;
    	case 'Mardi' :
    		if (moment == 'matin') { mardi_matin_selected = ! mardi_matin_selected; heures_vbox.visible = (mardi_matin_selected == true) ? true : false }
    		if (moment == 'midi') { mardi_midi_selected = ! mardi_midi_selected; heures_vbox.visible = (mardi_midi_selected == true) ? true : false }
    		if (moment == 'soir') { mardi_soir_selected = ! mardi_soir_selected; heures_vbox.visible = (mardi_soir_selected == true) ? true : false }
    		break;
    	case 'Mercredi' :
    		if (moment == 'matin') { mercredi_matin_selected = ! mercredi_matin_selected; heures_vbox.visible = (mercredi_matin_selected == true) ? true : false }
    		if (moment == 'midi') { mercredi_midi_selected = ! mercredi_midi_selected; heures_vbox.visible = (mercredi_midi_selected == true) ? true : false }
    		if (moment == 'soir') { mercredi_soir_selected = ! mercredi_soir_selected; heures_vbox.visible = (mercredi_soir_selected == true) ? true : false }
    		break;
    	case 'Jeudi' :
    		if (moment == 'matin') { jeudi_matin_selected = ! jeudi_matin_selected; heures_vbox.visible = (jeudi_matin_selected == true) ? true : false }
    		if (moment == 'midi') { jeudi_midi_selected = ! jeudi_midi_selected; heures_vbox.visible = (jeudi_midi_selected == true) ? true : false }
    		if (moment == 'soir') { jeudi_soir_selected = ! jeudi_soir_selected; heures_vbox.visible = (jeudi_soir_selected == true) ? true : false }
    		break;
    	case 'Vendredi' :
    		if (moment == 'matin') { vendredi_matin_selected = ! vendredi_matin_selected; heures_vbox.visible = (vendredi_matin_selected == true) ? true : false }
    		if (moment == 'midi') { vendredi_midi_selected = ! vendredi_midi_selected; heures_vbox.visible = (vendredi_midi_selected == true) ? true : false }
    		if (moment == 'soir') { vendredi_soir_selected = ! vendredi_soir_selected; heures_vbox.visible = (vendredi_soir_selected == true) ? true : false }
    		break;
    	case 'Samedi' :
    		if (moment == 'matin') { samedi_matin_selected = ! samedi_matin_selected; heures_vbox.visible = (samedi_matin_selected == true) ? true : false }
    		if (moment == 'midi') { samedi_midi_selected = ! samedi_midi_selected; heures_vbox.visible = (samedi_midi_selected == true) ? true : false }
    		if (moment == 'soir') { samedi_soir_selected = ! samedi_soir_selected; heures_vbox.visible = (samedi_soir_selected == true) ? true : false }
    		break;
    	case 'Dimanche' :
    		if (moment == 'matin') { dimanche_matin_selected = ! dimanche_matin_selected; heures_vbox.visible = (dimanche_matin_selected == true) ? true : false }
    		if (moment == 'midi') { dimanche_midi_selected = ! dimanche_midi_selected; heures_vbox.visible = (dimanche_midi_selected == true) ? true : false }
    		if (moment == 'soir') { dimanche_soir_selected = ! dimanche_soir_selected; heures_vbox.visible = (dimanche_soir_selected == true) ? true : false }
    		break;
    }
    Et, comme l'on peut je pense s'en douter, j'aimerais pouvoir rendre tout cela générique en "construisant" ma variable. En fait, au lieu de faire un switch ... case, je devrais pouvoir écrire une seule ligne du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    day + '_' + moment + '_selected' = !(day + '_' + moment + '_selected')
    J'ai vu au cours de mes recherches, que dans les versions précédentes d'ActionScript, il y avait la fonction Eval(). Celle-ci n'est apparemment plus disponible, et il faudrait utiliser un tableau, mais je ne suis pas arrivé à comprendre comment procéder pour utiliser ce fameux tableau.

    Sauriez-vous donc comment "construire" dynamiquement ma variable afin de rendre mon code générique ?

    Merci

  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
     
    this["ceciEstUnString" + ceciEstUneVariable]
    devrait marcher, à toi d'adapter avec ton cas de figure

    EDIT: comme je suis généreux...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this[day + '_' + moment + '_selected'] = !this[day + '_' + moment + '_selected'];

  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
    J'avais déjà vu cette idée de réponse sur le Net, avec l'emploi de "this", et je viens de ré-essayer.
    Mais ça ne fonctionne pas

    En gardant l'exemple ci-dessus, en utilisant le code de Madfrix :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this[day + '_' + moment + '_selected'] = !this[day + '_' + moment + '_selected'];
    mes variables <lundi_matin_selected>, <mardi_matin_selected>, <jeudi_soir_selected>, ... ne sont pas mises à jour.

    Ces dernières sont déclarées, en amont du code, de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Bindable] private var lundi_matin_selected:Boolean = false;
    Et je les utilises dans le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <mx:GridItem id="lundi_matin" backgroundColor="{(lundi_matin_selected == true) ? 0x339933 : 0xCC0000}" useHandCursor="true" buttonMode="true" click="manageHoraires('Lundi', 'matin', event);"/>
    Or, ma variable <lundi_matin_selected> ne vaut jamais true;

    Quelqu'un aurait-il une solution ? En attendant je me contente d'un switch... case qui m'oblige à avoir du code redondant.

    Merci

  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
    Bonjour,

    regarde ta variable day elle retourne tes jours en camelCase avec une majuscule or tes variables ne commencent pas par une majuscule (lundi_matin_selected, mardi_matin_selected...) donc la correspondance entre variables ne s'effectue pas

  5. #5
    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
    Pffffiou !!!

    Merci beaucoup d'avoir repéré cette erreur idiote

    Merci à vous 2

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JSTL] nom de variable "dynamique"
    Par gmonta31 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 04/05/2006, 13h31
  2. Nom de variable dynamique
    Par mavina dans le forum Linux
    Réponses: 7
    Dernier message: 26/04/2006, 20h48
  3. Réponses: 4
    Dernier message: 13/09/2005, 11h50
  4. Noms de Variables dynamiques
    Par horec dans le forum Langage
    Réponses: 7
    Dernier message: 22/07/2005, 16h47
  5. [SQL SERVER 2000] Noms de variables dynamiques
    Par cassoulet dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/09/2004, 11h44

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