【问题标题】:Spotify Clear Playlist Drag and DropSpotify 清除播放列表拖放
【发布时间】:2013-11-22 18:24:37
【问题描述】:

当您在边栏中将艺术家拖放到我的应用程序中时,我会构建一个临时播放列表。每次我将新艺术家拖入我的应用程序时,它都会在前一个艺术家之后构建一个新列表,而不会清除旧列表。 (注意这里缺少一些可能不需要的代码)。

我的问题:每次我将艺术家拖放到我的应用程序中时,如何清除或删除当前构建的播放列表然后构建一个新的播放列表?我怀疑它需要在 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);
              });
          });
        });
      });
    }

【问题讨论】:

    标签: javascript api spotify spotify-app


    【解决方案1】:

    我认为您可以将当前播放列表存储到本地存储,然后在删除功能中将其删除。 buildList 中的类似内容:

    localStorage.current_temp_playlist = playlist.uri;
    

    然后在 updateFromDragged:

    models.Playlist.removeTemporary(models.Playlist.fromURI(localStorage.current_temp_playlist));
    

    您可以单独将播放列表存储在 updateFromDragged 可以访问的地方。

    【讨论】:

      【解决方案2】:

      好吧,鉴于您的代码结构,您可以通过 Playlist.removeTemporary 方法 [1] 每次在 buildList 函数中删除整个播放列表:

      models.Playlist.removeTemporary("myTempList_yyyymmddhhmmss");
      

      或者您可以创建一次播放列表,然后每次清除播放列表。播放列表有一个名为 track 的属性,它是一个 Collection,它有一个名为 clear[2] 的方法。但是,要做到这一点,您必须记住首先加载轨道属性。这看起来像这样:

      models.Playlist.load('name','tracks')
          .done(function(loadedPlaylistToClear) {
              return loadedPlaylistToClear.tracks.clear();
          })
          .done(function(clearedPlaylist) {
              // add new tracks in here
          });
      

      [1]https://developer.spotify.com/docs/apps/api/1.0/api-models-playlist.html#removeTemporary

      [2]https://developer.spotify.com/docs/apps/api/1.0/api-models-collection.html#clear

      【讨论】:

        【解决方案3】:

        我最终做的是在顶部创建一个全局变量“tempList”。然后将播放列表存储在我的“buildList”函数中。在“updateFromDragged”中,我只是使用“tempList.tracks.clear”来清除存储的播放列表曲目。

        我也应该在这里使用“removeTemporary”吗?

        var tempList;
        
          // Build playlist
          function buildList(trackURIArray){
            var arr = trackURIArray;
            var date = new Date().getTime();
        
            models.Playlist
              // prevents appending new tracks on refresh
              .createTemporary("myTempList_" + date)
              .done(function (playlist){ 
        
                // Store created playlist
                tempList = playlist;
        
                playlist.load("tracks").done(function() {
        
                  playlist.tracks.add.apply(playlist.tracks, arr).done(function(){
                    // Create list
                    var list = List.forCollection(playlist, {
                      style: 'rounded',
                      layout: 'toplist'
                    });
        
                    // Hide loading
                    $loading.hide();
        
                    // Populate DOM
                    $('#playlistContainer').append(list.node);
                    list.init();
                  });
              });
            });
        
        function updateFromDragged(droppedUri) {
        
            // Clear out old tracks
            tempList.tracks.clear();
        
            // Remove the temporary ones not in use to reduce resource load
            models.Playlist.removeTemporary( models.Playlist.fromURI(tempList) );
        
            // If dropped item is an artist
            if(droppedUri.indexOf('artist') >= 0) {
              getRelated(droppedUri);
            } else {
                console.warn('Dropped item is not an artist');
            }    
        
          }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多