我如何获得JXA对象的实际类

时间:2016-08-28 19:39:43

标签: javascript applescript jxa

我正在尝试区分属于文件夹的iTunes播放列表和不属于文件夹的iTunes播放列表。

在AppleScript中,似乎有两种方法可以做到这一点:

  1. 我可以获取所有文件夹播放列表,并从用户播放列表中单独处理它们:

    set userPlaylists to user playlists
    set folderPlaylists to folder playlists
    -- …do processing
    
  2. 我可以使用class of pl is folder playlist检查播放列表的类别(其中pl是我的播放列表)。

  3. 这两种方法似乎都不适用于JXA。

    第一种方法不起作用,因为访问.folderPlaylists()会导致Error: Message not understood(其中app = Application('iTunes'))。可以通过这种方式访问​​其他所有类型的播放列表(app.playlists()app.libraryPlaylists()app.radioTunerPlaylists()app.subscriptionPlaylists()app.userPlaylists()app.audioCDPlaylists()都可以使用。这是一个错误吗?

    所以我尝试复制第二种方法。据我所知,ObjectSpecifier.classOf应该将对象类型作为字符串给我。但是,它只返回给对象的对象说明符所请求的类型。

    因此,在AppleScript class of (first item of (playlists whose name is "«Name of a folder playlist»"))给我folder playlist时,ObjectSpecifier.classOf(app.playlists.whose({name: '«Name of a folder playlist»'})()[0])只返回"playlist"(可能是因为我使用app.playlists来获取对象)。< / p>

    是否有能够返回播放列表实际类型的函数(例如"folder playlist""user playlist")?

1 个答案:

答案 0 :(得分:2)

从播放列表中获取文件夹:

folderList = itunesApp.playlists.whose({_match: [ObjectSpecifier().class, 'folderPlaylist']})()

要从播放列表对象中区分userPlaylist和folderPlaylist:

  • 使用:myobj.class() == 'folderPlaylist'
myList = itunesApp.playlists()
for (var i in myList) {
    if (myList[i].class() == 'folderPlaylist') { 

    } else if (myList[i].class() == 'userPlaylist') {

    }
}