0

我正在尝试在本机 spotify 列表中显示当前用户播放列表的列表。

我有这个来获取用户播放列表:

require([
  '$api/models',
  '$views/list#List',
  '$api/library#Library'
], function(models, List, Library) {
  'use strict';

  var UsersLibrary = Library.forCurrentUser();


  var test = function() 
  {
    console.log(UsersLibrary.playlists);
    var playlists = UsersLibrary.playlists.snapshot().done(function(s){

      var length = s.length;

      for(var x = 0; x < length; x++)
      {
        var meta = s._meta[x];
        if(!meta.name) continue ; // skip folders
      }

    });    
  };

  exports.test = test;
});

我可以循环播放列表没问题。当我尝试使用 spotify List 对象并创建一个列表时,问题就开始了。我尝试了这个(以及一些具有相同结果的变体):

var test = function() 
  {
    console.log(UsersLibrary.playlists);
    var playlists = UsersLibrary.playlists.snapshot().done(function(s){

      var list = List.forCollection(s._collection, {"layout":'table'});
    });    
  };

只要我调用 .forCollection 我就会得到 .forCollection Uncaught TypeError: Cannot call method 'indexOf' of null

经过一段时间的调试后,我发现当其中一个 spotify API 脚本尝试访问uri未定义的集合上的字段时,问题就出现了。

还有其他方法可以解决这个问题或我缺少什么吗?我在想用户播放列表会有一个 uri,但我找不到任何东西。

谢谢,

-肯

4

1 回答 1

2

该集合包含一组播放列表。您可以加载所有这些调用它的loadAll函数:

require([
  '$api/models',
  '$views/list#List',
  '$api/library#Library'
], function(models, List, Library) {
  'use strict';

  var UsersLibrary = Library.forCurrentUser();

  var test = function() {
    UsersLibrary.playlists.snapshot().done(function(s){
      s.loadAll().done(function(playlists){
        // playlists is an array of Playlist objects
      });
    });
  };

  exports.test = test;
});

如果您想List为特定的播放列表创建一个,您可以:

var playlist = playlist[0]; // we pick, for example, the first one
playlists.load('tracks').done(function(p) {
  var list = List.forCollection(p.tracks, {"layout":'table'});
  document.body.appendChild(list.node);
  list.init();
});
于 2013-09-18T07:55:27.723 回答