Spotify的播放列表清晰拖放 [英] Spotify Clear Playlist Drag and Drop

查看:160
本文介绍了Spotify的播放列表清晰拖放的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当你拖/放一个艺术家到我的应用程序在侧边栏,我建立一个临时的播放列表。我每次拖动一个新的艺术家到我的应用程序,它构建了previous后,一个新的列表,没有清理掉旧的。 (注意有一些code从这里缺少很可能不需要)。

我的问题:我如何清除或删除当前播放列表建成然后建立一个新的,每次我拖/放一个艺术家到我的应用程序的时间?我怀疑它需要内部getRelated()?

被称为

  models.application.addEventListener('下降',sidebarDropEventListener); 功能sidebarDropEventListener(){
   对于(VAR I = 0; I< models.application.dropped.length;我++){
      VAR draggedItem = models.application.dropped [I]
      updateFromDragged(draggedItem.uri);
   }
 } 功能updateFromDragged(droppedUri){
   //如果下跌项目是一个艺术家
   如果(droppedUri.indexOf(艺术家)> = 0){
      getRelated(droppedUri);
   }其他{
      console.warn('丢弃的产品不是一个艺术家');
   }
}     //建立播放列表
     功能buildList(trackURIArray){
       VAR ARR = trackURIArray;       models.Playlist
        .createTemporary(myTempList_+新的Date()。的getTime())
        .done(功能(播放列表){        playlist.load(轨道)。完成(功能(){          playlist.tracks.add.apply(playlist.tracks,ARR).done(函数(){
            //创建列表
            VAR列表= List.forCollection(播放);            //填充DOM
            $('#playlistContainer')追加(list.node)。
            list.init();
          });
      });
    });
  }    //获取相关
    功能getRelated(artist_uri){      models.Artist
      .fromURI(artist_uri)
      .load('相关','名')
      .done(功能(艺术家){        artist.related.snapshot()。完成(功能(快照){
          snapshot.loadAll()。完成(功能(艺术家){            VAR承诺= [];            对于(VAR I = 0; I< artists.length;我++){
              VAR承诺= getTopTrack(艺术家[I],1);
              promises.push(承诺);
            }            models.Promise.join(许诺)
              .done(功能(曲目){
                buildList(轨道);
              })
              .fail(功能(曲目){
                buildList(轨道);
              });
          });
        });
      });
    }


解决方案

我最终什么事做是创建一个全局变量tempList上方。然后里面储存我的buildList功能的播放列表。里面的updateFromDragged,我只是用tempList.tracks.clear来清除存储的播放列表中的曲目。

我应该用removeTemporary在这里呢?

  VAR tempList;  //建立播放列表
  功能buildList(trackURIArray){
    VAR ARR = trackURIArray;
    。VAR日期=新的日期()的getTime();    models.Playlist
      // prevents附加上刷新新的轨道
      .createTemporary(myTempList_+日期)
      .done(功能(播放列表){        //商店创建的播放列表
        tempList =播放列表;        playlist.load(轨道)。完成(功能(){          playlist.tracks.add.apply(playlist.tracks,ARR).done(函数(){
            //创建列表
            VAR列表= List.forCollection(播放列表,{
              风格:'四舍五入',
              布局:toplist
            });            //隐藏加载
            $ loading.hide();            //填充DOM
            $('#playlistContainer')追加(list.node)。
            list.init();
          });
      });
    });功能updateFromDragged(droppedUri){    //清除了旧迹
    tempList.tracks.clear();    //使用删除临时那些不以减少资源负荷
    models.Playlist.removeTemporary(models.Playlist.fromURI(tempList));    //如果下跌项目是一个艺术家
    如果(droppedUri.indexOf(艺术家)> = 0){
      getRelated(droppedUri);
    }其他{
        console.warn('丢弃的产品不是一个艺术家');
    }  }

When you drag/drop an Artist into my app in the sidebar, I build a temporary playlist. Every time I drag a new Artist into my app, it builds a new list after the previous, WITHOUT clearing out the old one. (Note there is some code missing from here that is probably not needed).

My question: how do I clear out or remove the current built playlist THEN build a new one, every time I drag/drop an Artist into my app? I suspect it would need to be called inside 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);
              });
          });
        });
      });
    }

解决方案

What I ended up doing was creating a global variable "tempList" at the top. Then storing the playlist inside my "buildList" function. Inside "updateFromDragged," I just use "tempList.tracks.clear" to clear out the stored playlist tracks.

Should I use "removeTemporary" here as well?

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');
    }    

  }

这篇关于Spotify的播放列表清晰拖放的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆