Вот сложная задача. Я относительно новичок в написании сценариев, но имею идею, что хочу работать.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.
Я должен добавить, что мне нужно 'familySrcLevel_1' ссылаться на выбор' familySrcLevel_0', по списку. –
Звучит сложно. Не могли бы вы нарушить свою проблему в меньших размерах? Также ваш пример кода не показывает ничего, что вы пытались использовать с функциями 'onChange'. Последнее, что я предложил бы избавиться от блока 'try catch', а также' eval' делает ваш код сложнее отлаживать – fabianmoronzirfas
Зачем избавляться от блока 'try catch'? Разве это не его цель для отладки? Я должен оставить утверждения 'eval'; это то, что позволяет мне создавать 'dropdownlists' на лету с уникальными именами переменных, поэтому я могу ссылаться на них раньше. –