当您将艺术家拖放到我的应用程序的边栏中时,我会构建一个临时播放列表。每次我将一个新艺术家拖到我的应用程序中时,它都会在前一个列表之后构建一个新列表,而不会清除旧列表。 (请注意,此处缺少一些可能不需要的代码)。
我的问题:每次我将艺术家拖/放到我的应用程序中时,如何清除或删除当前构建的播放列表然后构建一个新播放列表?我怀疑它需要在 getRelated() 中调用吗?
models.application.addEventListener('dropped', sidebarDropEventListener);
function sidebarDropEventListener() {
for(var i = 0; i < models.application.dropped.length; i++){
var draggedItem = models.application.dropped[i];
updateFromDragged(draggedItem.uri);
}
}
function updateFromDragged(droppedUri) {
// If dropped item is an artist
if(droppedUri.indexOf('artist') >= 0) {
getRelated(droppedUri);
} else {
console.warn('Dropped item is not an artist');
}
}
// Build playlist
function buildList(trackURIArray){
var arr = trackURIArray;
models.Playlist
.createTemporary("myTempList_" + new Date().getTime())
.done(function (playlist){
playlist.load("tracks").done(function() {
playlist.tracks.add.apply(playlist.tracks, arr).done(function(){
// Create list
var list = List.forCollection(playlist);
// Populate DOM
$('#playlistContainer').append(list.node);
list.init();
});
});
});
}
// Get Related
function getRelated(artist_uri){
models.Artist
.fromURI(artist_uri)
.load('related','name')
.done(function (artist){
artist.related.snapshot().done(function (snapshot){
snapshot.loadAll().done(function (artists){
var promises = [];
for(var i = 0; i < artists.length; i++){
var promise = getTopTrack(artists[i], 1);
promises.push(promise);
}
models.Promise.join(promises)
.done(function (tracks){
buildList(tracks);
})
.fail(function (tracks){
buildList(tracks);
});
});
});
});
}
最佳答案
我认为您可以将当前播放列表存储到本地存储,然后在 drop 函数中删除它。在 buildList 中是这样的:
localStorage.current_temp_playlist = playlist.uri;
然后在 updateFromDragged 中:
models.Playlist.removeTemporary(models.Playlist.fromURI(localStorage.current_temp_playlist));
您可以单独将播放列表存储在 updateFromDragged 可以访问的地方。
关于javascript - Spotify 清除播放列表拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19898092/