2017-04-13 2 views
0

Ich erstelle einige Skripte für InDesign, um den Prozess zu beschleunigen.
Ich habe ein Skript erstellt, wo eine bestimmte Zeile, denke ich, funktionieren sollte, aber InDesign widerspricht.OR-Operator in ExtendedScript

Es scheitert an ("Geen"||"None"); in den folgenden
app.changeGrepPreferences.appliedCharacterStyle = myDoc.characterStyles.item("[Geen]"||"[None]");

ich es erwarten [Geen] oder [None] zu einem characterStyle zu ändern. Abhängig davon, was in den vordefinierten Zeichenstilen verfügbar ist.

Was mache ich falsch? Das scheint irgendwie grundlegend zu sein.

Antwort

1

Leider ist das nicht so einfach. Wenn Sie doc.characterStyles.item('foo') verwenden, erhalten Sie immer noch eine [object CharacterStyle]. Selbst wenn es nicht existiert.

var doc = app.activeDocument; 
$.writeln(doc.characterStyles.item('foo')); 
// writes [object CharacterStyle] into the console 

Was können Sie tun, ist ein try{}catch(error){} Block verwenden und für die name Eigenschaft des Objekts fragen. In diesem Fall löst InDesign einen Fehler aus, den Sie abfangen können. Dann können Sie auf den Standardzeichenstil zurückfallen [None]

var doc = app.activeDocument; 
try{ 
    $.writeln(doc.characterStyles.item('foo').name); 
}catch(e) { 
    $.writeln(e); 
    $.writeln(doc.characterStyles.item('[None]').name); 
} 

Edit: Wie mdomino erwähnt. Sie können die isValid Eigenschaft verwenden.

var doc = app.activeDocument; 

if(doc.characterStyles.item('foo').isValid === true) { 
    $.writeln('doc.characterStyles.item(\'foo\') exists'); 
} else { 
    $.writeln('use doc.characterStyles.item(\'[None]\') because '); 
    var defaultStyle = doc.characterStyles.item('[None]'); 
    $.writeln(defaultStyle.name + ' is ' + defaultStyle.isValid); 
} 
+0

Schön funktioniert perfekt. Vielen Dank! – Interactive

+1

Oder, wenn Sie einen 'try catch' vermeiden möchten, können Sie alternativ die Eigenschaft' doc.characterStlyes.item ("[Geen]"). IsValid' überprüfen. – mdomino