Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2499 connectés 

  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  [AS3] Recupérer une Array via son .name ou .id

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[AS3] Recupérer une Array via son .name ou .id

n°1886498
abais
Posté le 20-05-2009 à 14:07:16  profilanswer
 

Voila mon problème :
 
Admettons, j'ai :

Code :
  1. var monTableau1:Array = (.....);
  2. var monTableau2:Array = (.....);
  3. var monTableau3:Array = (.....);


 
J'ai 3 boutons : monBouton1, monBouton2 et monBouton3 dans un clip "boutonConteneur"...

Code :
  1. boutonConteneur.addEventListener(MouseEvent.CLICK, clikBouton);
  2.  
  3. function clikBouton(e:MouseEvent) {
  4.     var numBouton:String = e.target.name.substr(9); //Retourne '1', '2' ou '3' en fonction du bouton
  5.     var tableauArecup:String = "monTableau"+numBouton;
  6.     fonctionExterne(argument);
  7. }


Je veux à partir du nom du bouton sur lequel j'ai cliqué, recupéré l'array correspondant au numéro...
cet Array servira a ma fonctionExterne() qui nécessite en guise d'argument ce précieux Array
que dois-je mettre à la place de "argument" ?
bien entendu, je pourrais faire un switch, et executer ma fonction avec un argument en dure selon numBouton (surtout si il y a que 3 boutons)
ou encore, enfermer les 3 Array dans une unique Array et faire :
 

Code :
  1. var monTableau1:Array = (.....);
  2. var monTableau2:Array = (.....);
  3. var monTableau3:Array = (.....);
  4.  
  5. var uniqueTab:Array = new Array (monTableau1, monTableau2, monTableau3);
  6.  
  7. boutonConteneur.addEventListener(MouseEvent.CLICK, clikBouton);
  8.  
  9. function clikBouton(e:MouseEvent) {
  10.     var numBouton:uint= uint(e.target.name.substr(9)); //Retourne 1, 2 ou 3 en fonction du bouton
  11.     fonctionExterne(uniqueArray[numBouton]);
  12. }


Mais je trouve ça un peu lourd si j'ai beaucoup d'array...
Donc, ma question est la suivante, existe t-il une methode qui retourne un Array grâce à un nom en String ?
Exactement de la meme façon qu'on peut recupérer un movieClip à partir de son nom avec getChilByName('string')
 
Merci de pouvoir m'éclairer avec vos lanternes !


Message édité par abais le 22-05-2009 à 13:47:52

---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
mood
Publicité
Posté le 20-05-2009 à 14:07:16  profilanswer
 

n°1886992
graphix
Posté le 22-05-2009 à 11:26:16  profilanswer
 

Au risque de répondre a coté :
 
Tu pourrais passer la reference de l'array en tant que proprieté de chaque bouton.
 
Il serais des lors accessible depuis l'object e.target.monArray

n°1886993
abais
Posté le 22-05-2009 à 11:39:33  profilanswer
 

ça poserai le même souci...
Mon but est justement de lier dynamiquement ces arrays a mes boutons...
Je ne veux pas declarer cette propriété avec :
 
bouton1.monArray = monTableau1;
bouton2.monArray = monTableau2;
...
 
Bref, passer par un switch ou un tableau general comme decris plus haut serait mieux (ou au moins équivalent)....


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°1887001
graphix
Posté le 22-05-2009 à 12:12:07  profilanswer
 

dans ce cas, une classe perso qui etend array, dans laquelle tu ajoutes la fonction getById()
 
Mais pour le coup, les solutions dont tu parlais precedemment semblent plus rapides a mettre en place.
 
Mais extraire une string 1,2,3 ... de la propriété name du bouton n'est a mon avis pas forcement la solution la plus élégante, ni la plus optimisée. Autant attribuer à chaque bouton une variable de type integer directement.

n°1887019
abais
Posté le 22-05-2009 à 13:43:59  profilanswer
 

graphix a écrit :

dans ce cas, une classe perso qui etend array, dans laquelle tu ajoutes la fonction getById()

 

getById() n'existe pas... il n'y a pas d'equivalent, c'est que j'accuse (plus haut je demande par .name mais par .id me conviendrait aussi)
Pour des displayObject, y a pas de problème, mais pour les variables "invisible" je ne trouve pas...
à croire que les propriété ID ou NAME ne servent qu'au displayObject....

 

En JS, le getElementByID peut nous ramener à n'importe quel Elements, mais en AS il n'ont pas pensé à faire pareil faut croire...


Message édité par abais le 22-05-2009 à 13:44:49

---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°1887034
jirotoh
Posté le 22-05-2009 à 15:02:45  profilanswer
 

Graphix te propose une bonne solution :
 
Tu crées une classe perso (MonArray extends Array) dans laquelle tu rajoutes une propriété ( id )  
et une méthode (getById( id:Number):Array ) qui te retourne l'array en question
 
monTableau:Array deviendrait monTableau:MonArray

n°1887037
graphix
Posté le 22-05-2009 à 15:32:53  profilanswer
 

Le plus simple : dans la classe qui etend array, tu definit un tableau statique. private static  var tabArrays:Array = new Array();
 
Dans le constructeur de ta classe array, tu stoque la reference de chaque array étendu crée. MaClasseArray.tabArrays.push( this );
 
public function getById(id:int):MaClasseArray
{
    var lng:int = MaClasseArray.tabArrays.length;
    var i:int = 0
    while(i<lng)
    {
       if(MaClasseArray.tabArrays[i].id==id)
        {
              break;
        }
        i++
    }
     return MaClasseArray.tabArrays[i];
}
 
Je n'ai pas testé le code mais ca devrais etre ça.
Tel quel ce n'est pas parfait, si tu spécifie un id non présent cela levera une erreur, mais c'est facilement améliorable.
 
edit :
plus pratique que while :
 
public function getById(id:int):MaClasseArray
{
for each (var i:MaClasseArray in MaClasseArray.tabArrays)
{    
    if(i.id==id)
        {
            return i
            break
        }
}
}
 


Message édité par graphix le 22-05-2009 à 15:55:02
n°1887040
abais
Posté le 22-05-2009 à 15:42:02  profilanswer
 

Merci Jirotoh !
mais c'est la misère, je ne sais pas trop faire ça, je comprend l'idée de recréer une classe Array, mais je suis pas un developpeur...
Je chercherai des tutos...
Mais le fait que ça vous paraisse simple me décourage dans la prog ...
Je me contente pour le moment de ma soluce switch et je me pencherai dessus quand j'aurais le temps...


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°1887041
abais
Posté le 22-05-2009 à 15:43:03  profilanswer
 

Oh, merci graphix !


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°1887042
graphix
Posté le 22-05-2009 à 15:49:11  profilanswer
 

Ne te décourages pas, rien n'est simple au départ, ensuite ça le deviens avec l'habitude.
 
Mieux qu'un tuto, tu as un bouquin sur l'AS3 disponible gratuitement en ebook : recherche "pratique d'actionscript 3".
Tu y trouvera notemment un exemple de classe Array perso chapitre 9.
 
Dans l'immediat ta soluce d'un tableau general fonctionne, si le coeur t'en dit tu as maintenant les pistes pour perfectionner le systeme, ou pas ;)

mood
Publicité
Posté le 22-05-2009 à 15:49:11  profilanswer
 

n°1887070
abais
Posté le 22-05-2009 à 18:24:24  profilanswer
 

graphix a écrit :

Ne te décourages pas, rien n'est simple au départ, ensuite ça le deviens avec l'habitude.
 
Mieux qu'un tuto, tu as un bouquin sur l'AS3 disponible gratuitement en ebook : recherche "pratique d'actionscript 3".
Tu y trouvera notemment un exemple de classe Array perso chapitre 9.
 
Dans l'immediat ta soluce d'un tableau general fonctionne, si le coeur t'en dit tu as maintenant les pistes pour perfectionner le systeme, ou pas ;)


Oui je l'ai, je vais y jeter un coup d'zieux ;) Merci en tout cas


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°1887329
Zedlefou
In cabbage we trust !
Posté le 24-05-2009 à 12:42:02  profilanswer
 

Pour moi ta deuxième solution est la plus simple, à part que ce n'est pas la peine d'envoyer tout le tableau

Code :
  1. var monTableau1:Array = (.....);
  2.    var monTableau2:Array = (.....);
  3.    var monTableau3:Array = (.....);
  4.    
  5.    var uniqueTab:Array = new Array (monTableau1, monTableau2, monTableau3);
  6.    
  7.    boutonConteneur.addEventListener(MouseEvent.CLICK, clikBouton);
  8.    
  9.    function clikBouton(e:MouseEvent) {
  10.        var numBouton:uint= uint(e.target.name.substr(9)); //Retourne 1, 2 ou 3 en fonction du bouton
  11.        fonctionExterne(numBouton);
  12.    }
  13.    function fonctionExterne(num:int){
  14.        trace(uniqueTab[num]);
  15.        // ou bien
  16.        trace(this["monTableau" + num]); // hmmmm ca ressamble bcp à de l'AS2 ça. Si ça marche pas, en modifiant 2-3 trucs sur cette ligne ça devrait passer.
  17.    }


Message édité par Zedlefou le 24-05-2009 à 12:42:23

---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
n°1887350
abais
Posté le 24-05-2009 à 14:37:23  profilanswer
 

Youhou, ça marche Zed, les [] te permettent bien de sélectionner n'importe quoi à partir du nom de la variable !
Je pensais que ce n'était qu'un raccourci de .getChildByName() qui ne marche que pour les DisplayObject (logique pour un "child" )...

Code :
  1. var monTableau : Array = new Array(1,2,3,4);
  2.  
  3. function traceTab(tab:Array){
  4.     trace(tab.length);
  5. }
  6.     
  7. function traceTabByName (tabName:String){
  8.     traceTab(this[tabName]);
  9. }
  10. traceTabByName('monTableau'); //retourne bien 4 !


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  [AS3] Recupérer une Array via son .name ou .id

 

Sujets relatifs
Créer un formulaire et récupérer les données saisies ds un tableauRécupérer des données d'un menu déroulant en Perl
Récupérer informations dans un fichier du serveurrecuperer des lignes d'un txt selonune condition
recuperer le resultat d'un javascript dans un formulaireRécupérer une variable du shell [fpc lazarus debian]
Récupérer la première ligne d'une celluleRécupérer variables de javascript en php (Ajax)
Récupérer variables de javascript en php (Ajax)Indentation Array
Plus de sujets relatifs à : [AS3] Recupérer une Array via son .name ou .id


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR