2016-08-12 1 views
1

J'ai essayé de vérifier si un objet (ou un calque) existe dans un document. Ce script fonctionne s'il existe un objet page avec le nom x. Mais cela échoue sinon. (Jusqu'ici tout va bien)L'objet de Schroedinger?

La partie étrange est: même si cet objet nommé "x" n'existe pas, A renvoie un objet. Si je lui demande son nom, son identifiant, son index ou quoi que ce soit, le script s'arrête à cause d'une erreur.

//Schroedinger's object 
A=app.activeDocument.pageItems.itemByName("x") 
$.writeln(A) //returns: [object PageItem] 
$.writeln(A.id) //Error. doesn't exist 

Alors, essayez-le avec un nouveau document vide dans InDesign et exécutez le script. Je ne comprends pas ce phénomène.

Au moins vous pouvez le vérifier est existance avec A.isValid (c'est ce que je me sers maintenant, en espérant pour le mieux)

+1

[Cet article de blog] (http://www.indiscripts.com/post/2010/06/on-everyitem-part-1) explique les choses utilement. –

Répondre

3

Votre approche est correcte.

.itemByName() renvoie toujours un objet PageItem (à condition que vous ayez transmis une chaîne en tant qu'argument). Mais l'objet retourné ne sera valide que s'il existe un élément correspondant dans le document. Vous devez utiliser la propriété .isValid pour vérifier si l'objet renvoyé est valide.