Note的相同属性有时是一个对象的数组,有时是对象本身。为什么?

时间:2016-04-12 08:54:44

标签: adobe-indesign extendscript

NoteparentstoryOffset属性的类型取决于该笔记是从Text还是Story获得的。为什么?如何在Note的代码中干净地处理这个问题,而不知道它来自哪里?

以下脚本揭示了这种情况。

// INDESIGN CS6 8.1 VERSION

var doc = app.documents.add();
doc.pages.item(0).textFrames.add();
var story = doc.stories[0];
story.insertionPoints[0].contents = "x";
story.insertionPoints[0].notes.add();
var range = story.texts.itemByRange(story.characters.item(0),
                                    story.characters.item(1));

alert(  story  .notes[0].parent.constructor.name);      // "InsertionPoint"
alert(  range  .notes[0].parent.constructor.name);      // "Array"

alert(  story  .notes[0].storyOffset.constructor.name); // "InsertionPoint"
alert(  range  .notes[0].storyOffset.constructor.name); // "Array"

// INCOPY CS6 8.1 VERSION

app.documents.add();
var story = app.selection[0].parentStory;
story.insertionPoints[0].contents = "x";
story.insertionPoints[0].notes.add();
var range = story.texts.itemByRange(story.characters.item(0),
                                    story.characters.item(1));

alert(  story  .notes[0].parent.constructor.name);      // "InsertionPoint"
alert(  range  .notes[0].parent.constructor.name);      // "Array"

alert(  story  .notes[0].storyOffset.constructor.name); // "InsertionPoint"
alert(  range  .notes[0].storyOffset.constructor.name); // "Array"

1 个答案:

答案 0 :(得分:0)

您必须测试要处理的每个父构造函数。有关Text对象的类层次结构,请参阅documentation。例如,使用如下函数:

var isText = function(text) {
   var c = text.constructor;
   return c === Paragraph || c === Line || c === Word
      || c === Text || c === TextStyleRange || c === Story
      || c === InsertionPoint || c === TextColumn;
}

isText(story.notes[0].parent) // => true