2013-10-15 7 views
3

Я должен выиграть какую-то награду за этот.Ошибка скрипта InDesign: «Ожидаемый уровень, но полученный уровень»

У меня есть (очень большой) скрипт, работающий в InDesign, который в какой-то момент помещает ресурс библиотеки на страницу, а затем перемещает его на определенный слой. Этот скрипт отлично работает на всех наших компьютерах здесь, но только тогда, когда в InDesign нет других документов, открытых в то время.

Если другой документ является открытым, то ошибка появляется, когда скрипт пытается переместить помещенное актива на другой слой:

JavaScript Error!

Error Number: 54 Error String: Uncaught JavaScript exception: ERROR at line number 2651 Invalid value for set property 'itemLayer'. Expected Layer, but received Layer.

Обратите внимание на детали выделены жирным шрифтом. Он получил то, чего ожидал, поэтому он бросает истерику? Для меня это не имеет смысла. И для записи, вот строка коды она ссылается:

curAsset[0].itemLayer = document.layers.item("Art Work (max imprint)"); 

И для записи, curAsset[0]является объектом актива взят из библиотеки и уже размещен на документе. И document - это переменная, которая уже была назначена текущему открытому документу.

Моя рабочая теория заключается в том, что другие документы, открытые в InDesign, вызывают эту ошибку, так как это единственная корреляция, которую я смог сделать до сих пор, но я не вижу, как это сделать. Сценарий уже имеет переменную document, которая ссылается только на один из открытых документов. И все остальное в скрипте работает отлично, за исключением этой одной строки (пока). Любые идеи, пожалуйста?

+0

Не может быть, что он получает этот объект 'Layer' из другого документа, когда другие открыты каким-то образом? –

+0

Это в значительной степени моя рабочая теория, но я понятия не имею, как или почему она делает это только с одной строкой кода из десятков строк, относящихся к переменной 'document'.Я говорю всем здесь, чтобы убедиться, что в InDesign нет открытых документов, прежде чем запускать скрипт, но это не идеально, очевидно. – Sturm

+0

+1 только для сообщения об ошибке. – georg

ответ

0

Это очень смешное/беспричинное сообщение об ошибке. Вы всегда можете попробовать getElements(). Иногда это работает как магия.

curAsset[0].itemLayer = document.layers.item("Art Work (max imprint)").getElements()[0]; 

Ещё одна вещь, о которой нужно подумать. Extendscript в InDesign иногда не проводит различия между объектом определенного типа и массивом объектов указанного типа. Поэтому вы можете захотеть убедиться, что ваш запрос возвращает только один элемент.

0

TLDR; Убедитесь, что ваш объект «document» - это тот же объект, который использовался для создания вашего массива «curAsset».

Я надеюсь, что вы нашли решение с тех пор, но если у вас нет, я могу повести вас к поиску решения. Я рассматривал этот тип ошибок «Ожидаемый X, но получил X» сам.

Трудно узнать, не видя остальную часть кода, но я подозреваю, что ссылка на объект «документ» не ссылается на тот же документ, на который ссылаются объекты «curAsset».

В моем случае, когда это произошло, я пытался скопировать абзац из документа в другой, а затем назначить стиль абзаца, но я ошибочно использовал ссылку стиля абзаца из первого документа при попытке применить это к абзацу второго документа. Хотя оба документа имеют одинаковый стиль шаблона и абзаца, ссылка на объект стиля абзаца уникальна для документа.