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

ActionScript 3 Discussion :

Appeler des fonctions listées dans un tableau


Sujet :

ActionScript 3

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut Appeler des fonctions listées dans un tableau
    Bonjour à tous,

    J'ai créé dynamiquement un menu, contenant plusieurs boutons. Lorsque je clique sur l'un d'entre eux, je souhaiterai appeler une fonction listée dans un tableau.
    • j'ai créé mon tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var fonctions:Array = [ "fonction1", "fonction2", "fonction3"];
    • mon écouteur d'événement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fondBouton.addEventListener (MouseEvent.CLICK, fonctions[h] as String);
    • et j'ai créé mes fonctions 1, 2 et 3.

    Or cela ne fonctionne pas, j'ai cette erreur : 1067: Contrainte implicite d'une valeur du type String vers un type sans rapport Function.
    Sans le "as String", l'erreur est : conversion en Function impossible.
    Auriez-vous une idée du problème ? je suis bloquée et j'ai beau chercher sur le forum, je ne trouve rien pour m'aider... Merci pour votre aide.
    Joyeuses Fêtes à tous !!

  2. #2
    Membre habitué
    Homme Profil pro
    Creative Technologist
    Inscrit en
    Avril 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Creative Technologist

    Informations forums :
    Inscription : Avril 2007
    Messages : 126
    Points : 174
    Points
    174
    Par défaut
    Ton problème vient du fait que tu sembles confondre la fonction et le nom de la fonction. Autrement dit l'identifiant de l'objet, et l'objet lui-même.

    Si tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var fonctions:Array = ["fonction1", "fonction2", "fonction3"];
    ce que tu mets dans le tableau, ce sont des String (il y a des guillemets).

    Ca n'a d'ailleurs pas de sens d'écrire ... functions[h] as String, puisque d'une part le tableau contient déjà des objets de type String (le cast est donc redondant), ensuite, parce qu'en castant String un objet que la méthode addEventListener attends de type Function, tu génères nécessairement une erreur.

    Par contre, si tu veux mettre des fonctions dans ton tableau, tu dois écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var fonctions:Array = [fonction1, fonction2, fonction3];
    (sans guillemets). Ainsi ce sont bien les fonctions que tu mets dans le tableau, et nom pas les noms des fonctions.

    Ainsi, le code suivant devra être tout simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fondBouton.addEventListener (MouseEvent.CLICK, fonctions[h]);
    (notes qu'écrire ...fonctions[h] as Function serait juste, mais à nouveau redondant).

    Par ailleurs grâce à son nom, tu peux récupérer une fonction, c'est à dire en fait la méthode d'un objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myFunction = myObject["functionName"];
    Or ici, à priori, l'objet est celui dans lequel tu es en train d''exécuter ton code, c'est à dire "cet objet ci" autrement dit l'objet auquel tu accèdes via le mot clé this.
    Tu peux donc écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myFunction = this["functionName"];
    Enfin, pour compléter l'exemple, tu peux déclencher l'exécution de la fonction ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this["functionName"](arguments);
    Pour conclure, tu as deux possibilités pour résoudre ton problème:

    Soit tu stockes les noms des fonctions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var fonctions:Array = ["fonction1", "fonction2", "fonction3"];
    fondBouton.addEventListener (MouseEvent.CLICK, this[fonctions[h]]);
    Soit tu stockes les fonctions elles-mêmes (ce qui est plus propre):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var fonctions:Array = [fonction1, fonction2, fonction3];
    fondBouton.addEventListener (MouseEvent.CLICK, fonctions[h]);
    Voilà, ça devrait marcher

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Bonjour David !
    Mille mercis pour ces explications très précises. Maintenant, je comprends mieux effectivement, tout devient clair.
    Très bonne année à toi ! et encore merci !

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

Discussions similaires

  1. [Débutant] Appeler des fonctions C# dans du code html
    Par sheira dans le forum C#
    Réponses: 8
    Dernier message: 14/02/2012, 17h56
  2. Réponses: 0
    Dernier message: 20/09/2010, 16h25
  3. Réponses: 2
    Dernier message: 19/09/2006, 20h06
  4. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 14h33

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