我现在在使用 Toplists 和 Image 时遇到困难,我希望有人可以帮助我。本质上,我想做的就是创建一个播放器和播放列表,其中包含艺术家的热门曲目。我尝试使用搜索,因为我无法从 Toplists 中获得所需的行为,但这并没有让我更接近,所以我想我会在这里问。
本质上,该功能应该:
- 取艺术家姓名或艺术家 ID
- 找出艺术家排名前 10 的曲目
- 创建一个新的临时播放列表并添加 10 首曲目
- 创建并插入播放器和播放列表
这看起来很容易,但它让我有点发疯。
我现在在使用 Toplists 和 Image 时遇到困难,我希望有人可以帮助我。本质上,我想做的就是创建一个播放器和播放列表,其中包含艺术家的热门曲目。我尝试使用搜索,因为我无法从 Toplists 中获得所需的行为,但这并没有让我更接近,所以我想我会在这里问。
本质上,该功能应该:
这看起来很容易,但它让我有点发疯。
您可以使用该Toplist.forArtist
功能获取艺术家的前 10 首曲目。
以下代码获取艺术家的前 10 首热门曲目并呈现列表视图和播放器:
require(['$api/toplists#Toplist', '$views/list#List', '$views/image#Image'],
function(Toplist, List, Image) {
var artist = models.Artist.fromURI('spotify:artist:2qk9voo8llSGYcZ6xrBzKx');
var toplist = Toplist.forArtist(artist);
// fetch the 10 most played tracks
toplist.tracks.snapshot(0, 10).done(function(tracks) {
// create temporary playlist
models.Playlist
.createTemporary('myTempList')
.done(function(playlist){
playlist.load('tracks').done(function(){
for (var i = 0, l = tracks.length; i < l; i++) {
var track = tracks.get(i);
playlist.tracks.add(track);
}
// append a list view
var listWrapper = document.getElementById('list-wrapper');
var list = List.forPlaylist(playlist);
listWrapper.appendChild(list.node);
list.init();
// append a player
// note that you might have a grey placeholder
// see https://stackoverflow.com/questions/17477655
var playerWrapper = document.getElementById('player-wrapper');
var player = Image.forPlaylist(playlist, {player: true});
playerWrapper.appendChild(player.node);
});
});
});
});
JS 代码引用了 2 个将包含视图的占位符:
<div id="list-wrapper"></div>
<div id="player-wrapper"></div>
请注意,由于临时播放列表的马赛克封面图像存在问题,您可能需要将默认封面占位符替换为其他图像。