Spotify: как предотвратить запоминание прослушивания более 1 песни?

Я делаю приложение для Spotify. С этим приложением у меня есть простая функция «Подписаться», которая позволяет мне добавить список воспроизведения альбома из текущей дорожки, которую слушает пользователь. Все работает нормально. Хотя у меня есть этот баг. После прослушивания более 1 песни, когда я нажимаю кнопку подписки, он добавляет список воспроизведения для каждой прослушанной песни.

Например: я прослушал 3 песни из альбома, затем нажимаю подписаться: будут добавлены 3 плейлиста, для каждой песни по одному. Затем: если я затем послушаю песню из другого альбома, при нажатии кнопки «Подписаться» будет добавлен список воспроизведения для новой песни И для предыдущих 3 песен. Это продолжается до тех пор, пока я не перезагрузил приложение.

Кажется, он запоминает каждую прослушанную песню после загрузки приложения.

Это мой код:

функция подписки () {

//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!");
    });
});

}

Мне нужен способ предотвратить эту проблему. Я пробовал много разных методов и бесконечно искал в Интернете, но пока безуспешно. Любая помощь или указание в правильном направлении будет потрясающим!


person RandyD    schedule 06.04.2012    source источник


Ответы (2)


Я решил проблему.

Было 2 вещи, которые вызвали ошибку. Это были решения:

  1. У меня были все вары, помещенные в событие клика.

  2. У меня был eventListener где-то еще в коде, что также вызывало ошибку. Этот прослушиватель событий обнаружил, изменилось ли состояние игрока, и если это правда, он обновит инициализацию. Тем не менее, он, по-видимому, сложил переменные внутри моей подписки(). После удаления этого из eventListener и замены vars он, наконец, работает так, как должен работать.

    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!");
    });
    

    }); }

Спасибо за помощь людям!

person RandyD    schedule 08.04.2012

Ну, каждый раз создается новый плейлист, потому что вы делаете это при каждом клике:

var playlist = new models.Playlist(albumTitle+" - "+artistFromAlbum);

new в этой строке действительно означает это ;-)

Если вы хотите использовать один и тот же список воспроизведения несколькими щелчками мыши, сохраните созданные вами списки воспроизведения в переменной где-нибудь, чтобы вы могли снова получить к ним доступ позже. К сожалению, в настоящее время нет возможности просмотреть список плейлистов, которые есть у пользователя.

person iKenndac    schedule 07.04.2012
comment
Ну, я думаю, что недостаточно конкретно описал свою проблему. Я отредактировал свое описание, чтобы, надеюсь, было более понятно, что происходит. Я также пытался использовать переменные, а также массивы, для хранения добавленных плейлистов. Получаем огромное количество кодов на 1 простую функцию, а проблема так и не решена. Любые идеи? - person RandyD; 07.04.2012