2016-06-17 26 views
0

Hier ist eine Herausforderung. Ich bin relativ neu im Scripting, habe aber eine Idee, dass ich arbeiten möchte.Extendscript: Dynamische Dropdown-Listen und OnChange-Funktionen für sie erstellen

Ich habe ein Skript, das dynamisch Dropdown-Listen basierend auf einem Array generiert: jedes Element in diesem Array erstellt eine dropdownlist.

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); 
 
      } 
 
     }

Wenn ich diese Funktion aufrufen (es funktioniert hier nicht perfekt, wie ich es gereinigt habe ein bisschen für die Anzeige nach oben) erstellt es richtig alle meine dropdownlists. Ich möchte jedoch onChange Ereignisse für jede von diesen erstellen, um die vorherige in dem erstellten Speicherarray zu referenzieren und seinen Inhalt zu ändern. Ich weiß, wie man die onChange Ereignisse funktioniert, wenn diese bekannt waren dropdownlists, aber jedes Projekt, an dem ich arbeite, ist anders und ich würde gerne arbeiten, ohne jedes Mal umrüsten zu müssen, wenn sich die Projektanforderungen ändern.

Zum Beispiel, wenn ich getDropDownLists(['mom','dad','baby'],family) nennen, würde ich drei dropdownlists erhalten: familySrcLevel_0, familySrcLevel_1, familySrcLevel_2. Wie würde ich dann onClick Ereignisse für jeden dieser dropdownlists erstellen, im Wissen, dass ich nicht immer wissen werde, wie viele es gibt? Ist so etwas möglich? Es muss in Extendscript gemacht werden.

+0

Ich sollte hinzufügen, dass ich 'familySrcLevel_1' brauche, um auf die Auswahl von' familySrcLevel_0' in der Liste zu verweisen. –

+0

Klingt kompliziert. Könntest du dein Problem in kleineren Stücken lösen? Außerdem zeigt Ihr Codebeispiel nichts, was Sie mit den 'onChange'-Funktionen versucht haben. Als letztes würde ich vorschlagen, den 'try catch' Block loszuwerden und auch das' eval' macht Ihren Code schwieriger zu debuggen. – fabianmoronzirfas

+0

Warum den 'try catch' Block loswerden? Ist das nicht der Zweck des Debuggens? Ich muss die 'eval' Anweisungen in; Sie ermöglichen es mir, "Drop-down-Listen" im laufenden Betrieb mit eindeutigen Variablennamen zu erstellen, so dass ich sie früher referenzieren kann. –

Antwort

0

Die Lösung bestand darin, eine weitere eval-Anweisung zu erstellen, die die onChange-Funktion am Ende der obigen Funktion enthielt.