Macos 如何指定同一类的多个AppleScript子元素?
我正在将Apple事件脚本添加到我的应用程序中。我希望能够使用以下两种说法:Macos 如何指定同一类的多个AppleScript子元素?,macos,scripting,applescript,Macos,Scripting,Applescript,我正在将Apple事件脚本添加到我的应用程序中。我希望能够使用以下两种说法: -- Every instance of MyObject in the app every MyObject -- Only the instances of MyObject the user has selected selected MyObjects 以下是我的sdef文件的相关摘录: <dictionary> <suite ...> <class n
-- 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>
...
当我调用每个MyObject
时,它会像预期的那样返回一个对象列表。但是当我调用选定的MyObjects
时,脚本编辑器会选择“MyObjects”部分并抱怨:
语法错误
应为行尾等,但找到复数类名
我怎样才能实现我的目标呢?你的设计是错误的。请参阅,以获得关于良好用户体验实践的略知一二但总比一无所获的概述 正确的习惯用法是定义
选择
属性,通常在应用程序
和/或文档
上。这可能是可读写的,也可能是只读的,这取决于适合您的应用程序的内容
选择
属性的值为:
selection of application "Foo"
或
一些更好的基于碳的应用程序和偶尔使用的Cocoa应用程序使用这种方法,允许用户执行强大的查询,例如:
get (name of every MyObject of selection of document X)
delete (every job whose status is completed)
但是需要更多的工作来实现{thing B of document X of application "Foo",
thing E of document X of application "Foo",...}
这是不太强大的,因为用户不能在一个命令中操作所有选定的项目,而是必须一次迭代列表处理每个项目,但实现起来更便宜。Cocoa脚本即使在最好的时候也有点蹩脚和不灵活,而且在一次移动/复制/删除多个对象方面也毫无希望,这是基于Cocoa的应用程序中最常见的方法
使用此属性更新您的sdef
文件:
<property name="selection" code="ABCD">
<cocoa key="selectedMyObjects" />
<type type="MyObject" list="yes" />
</property>
<property name="selection" code="ABCD">
<cocoa key="selectedMyObjects" />
<type type="MyObject" list="yes" />
</property>