我已经遵循了这个问题的公认答案:Spotify App API:播放专辑中的特定曲目
但是,它对我不起作用。Spotify 仍在播放专辑中的第一首曲目。
我查看了 view.js,我可以看到它为什么播放第一首曲目:
if (play) {
if (m.player.context !== this._context.uri) {
m.player.play(this._context.get(0), this._context);
}
我的代码在下面,有什么想法/建议吗?
var track = models.Track.fromURI(item.SpotifyUrl, function(track) {
var album = models.Album.fromURI(track.album.uri, function(album) {
var trackPlayer = new views.Player();
var t = album.data.tracks[track.data.trackNumber-1];
trackPlayer.track = t;
album.get = function() {
console.log(track.name); // I know this is being called
return track;
}
trackPlayer.context = album;
var $player = $(trackPlayer.node);
});
});
提前致谢。
更新:
我进一步查看了 api 并在 models.js 中发现了这一点:
if (index === -1) {
...
else if (context instanceof Album) {
numTracks = context.tracks.length;
while (i < numTracks) {
if (context.tracks[i].data.availableForPlayback) {
track = context.tracks[i];
index = i;
break;
} else {
i++;
}
以下方法调用:
if (play) {
if (m.player.context !== this._context.uri) {
m.player.play(this._context.get(0), this._context);
}
省略“索引”参数。因此,播放器将始终播放第一个可用曲目!为了解决这个问题,我添加了以下内容:
models.player.play = function(track, opt_context, opt_index) {
return this.playTrackWithContext(track,opt_context,track.data.trackNumber-1);
};
这似乎是一个有点混乱的解决方法,但在 Spotify 更新他们的代码之前,它似乎是解决它的唯一方法。除非,我完全错过了一些东西并且有更简单的方法?