如何指定同一类的多个AppleScript子元素?

时间:2015-01-24 02:13:49

标签: macos scripting applescript

我正在将Apple Event脚本添加到我的应用程序中。我希望能够使用下面的两个陈述:

-- Every instance of MyObject in the app
every MyObject

-- Only the instances of MyObject the user has selected
selected MyObjects

这些是我sdef文件的相关摘录:

<dictionary>
    <suite ...>
        <class name="application" code="capp" description="Top-level scripting object" plural="applications" inherits="application">
            <cocoa class="MyAppClass" />

            <element type="MyObject" access="r">
                <cocoa key="myobjects" />
            </element>

            <element name="selected MyObjects" code="ABCD" type="MyObject" access="rw">
                <cocoa key="selectedMyObjects" />
            </element>
        </class>

        <class name="MyObject" code="ABcd" inherits="item" plural="MyObjects">
        ...
        </class>
    </suite>
</dictionary>

当我调用every MyObject时,它会按预期返回一个对象列表。但是当我调用selected MyObjects时,脚本编辑器选择“MyObjects”部分并抱怨:

  

语法错误

     

预期的行尾等,但发现了多个类名。

我如何实现我的目标?

1 个答案:

答案 0 :(得分:1)

你的设计错了。请参阅Scripting Interface Guidelines,了解有关精简用户体验实践的精简程度,但不要过于简单。

正确的习惯用法是定义selection属性,通常位于application和/或document。这可能是读写或只读,具体取决于适合您的应用程序的内容。

selection属性的值为:

  1. 单个定制对象说明符,用于标识所有当前选定的对象,例如:

    selection of application "Foo"
    

    selection of document X of application "Foo"
    

    一些更好的基于Carbon的应用程序和偶尔的Cocoa应用程序使用这种方法,允许用户执行强大的查询,例如:

    get (name of every MyObject of selection of document X)
    
    delete (every job whose status is completed)
    

    但需要更多工作才能实施。

  2. 单对象说明符列表,每个说明符标识一个所选项目,例如:

    {thing B of document X of application "Foo", 
     thing E of document X of application "Foo",...}
    

    功能不强,因为用户无法在单个命令中操作所有选定的项目,但必须反复迭代列表,逐个处理每个项目,但实现起来要便宜一些。即使在最好的时候,Cocoa Scripting也有点蹩脚和不灵活,并且在移动/复制/删除多个对象时非常无望,这是基于Cocoa的应用程序中最常用的方法。

    使用此属性更新您的sdef文件:

    <property name="selection" code="ABCD">
        <cocoa key="selectedMyObjects" />
        <type type="MyObject" list="yes" />
    </property>
    
  3. 有关第一个(更好)设计方法的示例,请查看脚本编辑器自己的字典。有关第二个示例,请参阅Mail的字典。

    (提示:要在脚本编辑器中查看字典,请选择文件&gt;打开字典并从列表中选择相应的项目。要将该字典导出为SDEF文件,只需确保字典查看器窗口位于最前面,然后选择文件&gt;另存为。)