2016-06-17 1 views
0

Voici un défi. Je suis relativement nouveau dans les scripts mais j'ai une idée que je veux travailler. J'ai un script qui génère dynamiquement des listes déroulantes basées sur un tableau: chaque élément de ce tableau crée un dropdownlist.Extendscript: Créez dynamiquement des listes déroulantes et des fonctions onChange pour eux

function getDropDownLists(inputArray, grp) { //input an array and the UI Group we're adding these DDLs to 
 
      try { 
 
      eval(grp + "Array = [];"); //Creates an array to store the DDLs we're about to create 
 
      var listName; //Create variable to store name of DDL we're creating as we iterate through inputArray 
 
      for (var i = 0; i < inputArray.length; i++) { 
 
       listName = grp + "SrcLevel_" + i.toString(); //Get the name for the DDL we're about to create 
 
       eval('var ' + listName + ' = ' + grp + '.add("dropdownlist",[0,0,150,25])'); //add a DDL for the current array item 
 
       eval(listName + '.add("item","' + listName + '")'); //This line creates an item in each dropdown to tell me its name 
 
       eval(grp + "Array[" + i + "] = " + listName + ";"); //Adds newly created DDL to the storage array 
 
      } 
 
      } catch (e) { 
 
      alert("Error on line " + e.line + ":\n" + e.message); 
 
      } 
 
     }

Quand j'appelle cette fonction (il ne peut pas fonctionner parfaitement ici comme je l'ai nettoyé un peu à des fins d'affichage) correctement crée tout mon dropdownlists. Cependant, je souhaite créer des événements onChange pour chacun d'entre eux afin de référencer le précédent dans la matrice de stockage créée et de modifier son contenu. Je sais comment faire fonctionner les événements onChange si ceux-ci étaient connus dropdownlists, mais tous les projets sur lesquels je travaillerai sont différents et j'aimerais que cela fonctionne sans avoir à réorganiser chaque fois que les exigences du projet changent.

Par exemple, quand je l'appelle getDropDownLists(['mom','dad','baby'],family), je recevrais trois dropdownlists: familySrcLevel_0, familySrcLevel_1, familySrcLevel_2. Comment puis-je créer onClick événements pour chacun de ces dropdownlists, sachant que je ne saurai pas toujours combien il y en a? Une telle chose est possible? Cela doit être fait dans Extendscript.

+0

Je devrais ajouter que j'ai besoin de 'familySrcLevel_1' pour faire référence à la sélection de' familySrcLevel_0', dans la liste. –

+0

Cela semble compliqué. Pourriez-vous diviser votre problème en plus petits morceaux? Votre exemple de code ne montre pas non plus ce que vous avez essayé avec les fonctions 'onChange'. Enfin, je suggère de se débarrasser du bloc 'try catch' et aussi' eval' rend votre code plus difficile à déboguer – fabianmoronzirfas

+0

Pourquoi se débarrasser du bloc 'try catch'? N'est-ce pas son but pour le débogage? Je dois laisser les instructions 'eval' dans; c'est ce qui me permet de créer des listes déroulantes à la volée avec des noms de variables uniques pour pouvoir les référencer plus tôt. –

Répondre

0

La solution consistait à créer une autre instruction eval contenant la fonction onChange à la fin de la fonction ci-dessus.