我正在尝试在原生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
答案 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();
});