2016-06-17 2 views
0

Вот сложная задача. Я относительно новичок в написании сценариев, но имею идею, что хочу работать.Extendscript: динамически создавать выпадающие списки и функции onChange для них

У меня есть сценарий, который динамически генерирует выпадающие списки на основе массива: каждый элемент в этом массиве создает 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); 
 
      } 
 
     }

Когда я называю эту функцию (она не может работать отлично здесь, как я очистил его немного для целей отображения) он правильно создает все мои dropdownlists. Тем не менее, я хочу создать onChange событий для каждого из них, чтобы ссылаться на предыдущий в созданном массиве хранения и изменять его содержимое. Я знаю, как сделать события onChange, если они были известны dropdownlists, но каждый проект, над которым я буду работать, отличается, и я бы хотел, чтобы это работало без необходимости переустанавливать каждый раз, когда меняются требования к проекту.

Например, когда я называю getDropDownLists(['mom','dad','baby'],family), я хотел бы получить три dropdownlists: familySrcLevel_0, familySrcLevel_1, familySrcLevel_2. Как бы я тогда создал onClick событий для каждого из этих dropdownlists, зная, что я не всегда буду знать, сколько их есть? Возможно ли это? Это должно быть сделано в Extendscript.

+0

Я должен добавить, что мне нужно 'familySrcLevel_1' ссылаться на выбор' familySrcLevel_0', по списку. –

+0

Звучит сложно. Не могли бы вы нарушить свою проблему в меньших размерах? Также ваш пример кода не показывает ничего, что вы пытались использовать с функциями 'onChange'. Последнее, что я предложил бы избавиться от блока 'try catch', а также' eval' делает ваш код сложнее отлаживать – fabianmoronzirfas

+0

Зачем избавляться от блока 'try catch'? Разве это не его цель для отладки? Я должен оставить утверждения 'eval'; это то, что позволяет мне создавать 'dropdownlists' на лету с уникальными именами переменных, поэтому я могу ссылаться на них раньше. –

ответ

0

Решение заключалось в создании еще одного оператора eval, содержащего функцию onChange в нем в конце вышеприведенной функции.

Смежные вопросы