0

Spotifyのアプリを作っています。このアプリケーションには、ユーザーが現在聴いているトラックからアルバムのプレイリストを追加できる単純な「サブスクライブ」機能があります。すべて正常に動作します。私はこのバグを持っています。複数の曲を聴いた後、購読ボタンを押すと、聴いたすべての曲のプレイリストが追加されます。

例: アルバムの 3 曲を聴いた後、サブスクライブを押します。1 曲ごとに 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!");
    });
});

}

この問題を防ぐ方法が必要です。さまざまな方法を試し、ウェブを際限なく検索しましたが、今のところうまくいきません。正しい方向への助けや指摘は素晴らしいでしょう!

4

2 に答える 2

2

私は問題を解決しました。

バグの原因は2つありました。これが解決策でした:

  1. クリックイベント内にすべての変数を配置しました。

  2. コードのどこかに eventListener があり、バグにもなりました。その eventlistener は、プレイヤーの状態が変更されたかどうかを検出し、true の場合は init を更新します。しかし、どうやら subscribe() 内に vars を積み上げたようです。これをeventListenerから取り出して変数を置き換えた後、最終的には本来の動作をするようになりました。

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

    }); }

人々を助けてくれてありがとう!

于 2012-04-08T21:33:20.037 に答える
1

クリックごとにこれを行っているため、毎回まったく新しいプレイリストが作成されます。

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

そのnew行の は本当にそれを意味します;-)

複数のクリックで同じプレイリストを使用する場合は、作成したプレイリストを変数に保存して、後で再度アクセスできるようにします。残念ながら、現時点では、ユーザーが持っているプレイリストのリストを見る方法はありません。

于 2012-04-07T10:13:48.077 に答える