JXA调用Things3新建待办时如何获取push操作返回的任务ID
解决方案
方法1:直接访问待办实例属性(推荐)
JXA中手动创建的应用对象实例在添加到对应集合后,会自动同步应用侧分配的所有属性,包括唯一ID,无需依赖push方法的返回值,示例代码如下:
var TaskApp = Application('Things3') var toDo = TaskApp.ToDo({ name: "A new task", notes: "notes" }) // 添加到待办集合 TaskApp.toDos.push(toDo) // 直接从实例获取ID var taskId = toDo.id() console.log("新任务ID:" + taskId) // 若需要获取完整的byId引用,直接使用toDo变量即可,等价于TaskApp.toDos.byId(taskId)
方法2:获取待办集合的最新元素
如果是批量添加的场景,也可以通过下标取集合的最后一个元素获取新建的任务:
var TaskApp = Application('Things3') var toDo = TaskApp.ToDo({ name: "A new task", notes: "notes" }) TaskApp.toDos.push(toDo) // 取集合的最后一个元素 var newTask = TaskApp.toDos[TaskApp.toDos.length - 1] var taskId = newTask.id() console.log("新任务ID:" + taskId)
补充说明
Replies面板中显示的app.toDos.byId("HQebK1em72yZqc3WqTmyzx")是Apple事件的原始响应,JXA为了兼容JS原生数组的API规范,会将push方法的返回值重写为数组的新长度,因此无法直接从push的返回值中获取该引用。
内容的提问来源于stack exchange,提问作者GeistInTheBASH
相关产品推荐
相关产品推荐

