Пишу программу JavaScript под Photoshop CS4 (ExtendScript 3.92.115, ScriptUI4.0.38).
Создал окно с вложенной группой и панелью. Панель содержит множество групп, каждая по 2 объекта: Static Text, Edited Text.
Static Text хранит имя файла, а окошко Edited Text показывает номер файла в списке. Например так:
1a.psd 1
2B.psd 2
3C.psd 3
...
n.psd n
Список файлов может быть любым и заранее известно, что их будет от 2 до 63. Оператор может сортировать список, меняя номер в окошке Edited Text.
Скрипт следит за изменением номера и если новый номер оказывается допустимым, скрипт меняет местами имена двух файлов, вот так:
1a.psd 1
3C.psd 2
2B.psd 3
...
n.psd n
Скрипт успешно создает окно, проверят корректность номеров, исправляя недопустимые значения, но возникает ошибка при попытке заменить название файла.
Скрипт использует метод onChange, который вызывает безымянную функцию, одну, общую для всех групп списка.
Скрипт заранее не знает сколько будет файлов, поэтому названия объектов Static Text и Edited Text в каждой группе записаны в ассоциативный массив. Доступ осуществляется оператором [], со строкой в качестве индекса. Доступ к объектам организован одинаково, поэтому показываю только операции доступа к проблемному объекту:
nm.onChange = function() {
...
const cn= parseInt(this.text, 10);
const pi= cn - 1;
const stp= "st"+pi; //операция typeof stp возвращает string
const nn= this.parent[stp].text; // ERROR: undefined, in not an object
...
}
Объект с измененным номером в окошке Edited Text работает нормально: копируется имя файла из поля text объекта Static Text, взамен скрипт пишет другое имя и новый номер.
Второй объект, целевой, чей номер совпадает с введенным, оказывается не определеным: "undefined, in not an object". Но он есть и, если начать замену с его окошка, он работает.
Оба объекта запрограммированы идентично и присутствуют на окне полностью: имя файла, окошко с номером.
Как думаете, в чем проблема?
Создал окно с вложенной группой и панелью. Панель содержит множество групп, каждая по 2 объекта: Static Text, Edited Text.
Static Text хранит имя файла, а окошко Edited Text показывает номер файла в списке. Например так:
1a.psd 1
2B.psd 2
3C.psd 3
...
n.psd n
Список файлов может быть любым и заранее известно, что их будет от 2 до 63. Оператор может сортировать список, меняя номер в окошке Edited Text.
Скрипт следит за изменением номера и если новый номер оказывается допустимым, скрипт меняет местами имена двух файлов, вот так:
1a.psd 1
3C.psd 2
2B.psd 3
...
n.psd n
Скрипт успешно создает окно, проверят корректность номеров, исправляя недопустимые значения, но возникает ошибка при попытке заменить название файла.
Скрипт использует метод onChange, который вызывает безымянную функцию, одну, общую для всех групп списка.
Скрипт заранее не знает сколько будет файлов, поэтому названия объектов Static Text и Edited Text в каждой группе записаны в ассоциативный массив. Доступ осуществляется оператором [], со строкой в качестве индекса. Доступ к объектам организован одинаково, поэтому показываю только операции доступа к проблемному объекту:
nm.onChange = function() {
...
const cn= parseInt(this.text, 10);
const pi= cn - 1;
const stp= "st"+pi; //операция typeof stp возвращает string
const nn= this.parent[stp].text; // ERROR: undefined, in not an object
...
}
Объект с измененным номером в окошке Edited Text работает нормально: копируется имя файла из поля text объекта Static Text, взамен скрипт пишет другое имя и новый номер.
Второй объект, целевой, чей номер совпадает с введенным, оказывается не определеным: "undefined, in not an object". Но он есть и, если начать замену с его окошка, он работает.
Оба объекта запрограммированы идентично и присутствуют на окне полностью: имя файла, окошко с номером.
Как думаете, в чем проблема?