Spotify播放列表的应用列表

时间:2013-09-17 12:25:17

标签: javascript spotify

我正在尝试在原生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,我就会Uncaught TypeError: Cannot call method 'indexOf' of null

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

还有其他一些方法可以解决这个问题吗?我以为用户播放列表会有一个uri但我找不到任何东西。

谢谢,

-Ken

1 个答案:

答案 0 :(得分:1)

该集合包含一组播放列表。您可以加载调用其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();
});