我正在为Spotify申请。有了这个应用程序,我有一个简单的“订阅”功能,它允许我从用户正在收听的当前曲目添加相册的播放列表。一切正常。我有这个bug。 在听完超过1首歌曲后,当我按下订阅按钮时,它会为每首收听的歌曲添加一个播放列表。
例如:我收听了专辑中的3首歌曲,然后我按下订阅:它将为每首歌曲添加3个播放列表。 然后:如果我再听一张来自不同专辑的歌曲,当按下订阅时,它会为新歌和前三首歌添加一个播放列表。这种情况一直持续到我重新加载应用程序为止。
似乎它会记住加载应用程序后收听的每首歌曲。
这是我的代码:
function subscribe(){
//Cache important information
var playerTrackInfo = player.track;
var track = playerTrackInfo.data;
var albumUri = track.album.uri;
var albumTitle = track.album.name;
var artistFromAlbum = track.album.artist.name;
//Click event on button
$(".subscribe button").on("click", function(playlist){
console.log("I work!"); //Checks if button click works
//Creates new playlist "Albumtitle - Artistname"
var playlist = new models.Playlist(albumTitle+" - "+artistFromAlbum);
//Fills in playlist with album from current playing track
models.Album.fromURI(albumUri, function(album){
$(album.tracks).each(function(i) {
playlist.add(album.tracks[i]);
});
});
playlist.subscribed = true;
playlist.observe(models.EVENT.CHANGE, function() {
console.log("Playlist was subscribed!");
});
});
}
我需要一种方法来防止这个问题。我尝试了很多不同的方法,无休止地搜索网络,但到目前为止还没有运气。任何帮助或指向正确的方向都会很棒!
答案 0 :(得分:2)
我已经解决了这个问题。
有两件事导致了这个错误。这是解决方案:
我将所有变量放在点击事件中。
我在代码中的其他地方有一个eventListener,这也使它成为bug。 eventlistener检测到他们的播放器状态是否已更改,如果为true则将刷新init。但是,它显然在我的subscribe()中堆叠了变量。在将它从事件中取出并更换变量之后,它最终会起作用。
function subscribe(){
//Click event on button within div with class 'subscribe'
$(".subscribe button").on("click", function(playlist){
console.log("I work!"); //Checks if button click works
//Cache important information
var playerTrackInfo = player.track;
var track = playerTrackInfo.data;
var albumUri = track.album.uri;
//Creates new playlist "Albumtitle - Artistname"
var albumTitle = track.album.name;
var artistFromAlbum = track.album.artist.name;
var playlist = new models.Playlist(albumTitle +" - "+ artistFromAlbum);
//Fills in playlist with album from current playing track
models.Album.fromURI(albumUri, function(album){
$(album.tracks).each(function(i) {
playlist.add(album.tracks[i]);
});
});
playlist.subscribed = true;
playlist.observe(models.EVENT.CHANGE, function() {
console.log("Playlist was subscribed!");
});
}); }
感谢帮助别人!
答案 1 :(得分:1)
好吧,它每次都会制作一个全新的播放列表,因为您每次点击都会这样做:
var playlist = new models.Playlist(albumTitle+" - "+artistFromAlbum);
该行中的new
实际上意味着它; - )
如果您想通过多次点击使用相同的播放列表,请将您创建的播放列表存储在某个变量中,以便日后再次访问。不幸的是,目前无法查看用户的播放列表列表。