0

我正在构建一个生成临时曲目播放列表的应用程序。然后,我尝试为该临时播放列表创建一个“开始收音机”按钮。

该按钮已生成,但是当我单击它时,屏幕变为收音机,但不播放也不加载任何广播电台。

我的猜测是不支持此功能,因为如果我创建一个常规播放列表并执行此操作,它会播放收音机...

但我在 API 中找不到任何信息来证实或否认我的猜测。

如果不支持,有人确定吗?

我真的宁愿从临时播放列表中执行此操作,而不必维护一个真实的播放列表...

4

1 回答 1

1

你说的对。开始单选按钮不支持临时播放列表。而且,不幸的是,文档没有提到这一点。

附加到临时播放列表的曲目数据似乎无法传递给 Radio 应用程序,因此 Radio 应用程序加载时没有上下文信息。

正如您所说,实现此目的的唯一方法是创建一个持久播放列表并为此创建一个单选按钮。为了不每次都创建新的播放列表,您也可以尝试在用户的库中查找您之前创建的播放列表。

请参阅此代码段:

require(['$api/models', '$api/library#Library', '$views/buttons#StartRadioButton'],
  function(models, Library, StartRadioButton) {

  // create a temporary playlist with some tracks
  var playlistName = 'Some name';

  models.Playlist.create(playlistName).done(function(playlist) {
    playlist.load('tracks').done(function(loadedPlaylist) {
      var track1 = models.Track.fromURI('spotify:track:5EB60KIbYgL8nWrHoYbfv4');
      var track2 = models.Track.fromURI('spotify:track:7GPuYTiBA5BloBnFaQBjbw');
      loadedPlaylist.tracks.add(track1);
      loadedPlaylist.tracks.add(track2);

      // now we can add a button to start a radio base on the newly
      // created playlist
      var button = StartRadioButton.forPlaylist(loadedPlaylist);
      document.body.appendChild(button.node);

      // bonus: we can also search for the playlist in the user's library
      // so we don't have to create a new one all the time.
      // this will work as long as we can find the playlist we created by name
      // (i.e. it hasn't been renamed).
      var currentLibrary = Library.forCurrentUser();
        console.log(currentLibrary);
        currentLibrary.playlists.snapshot().done(function(p) {
          for (var i = 0; i < p.length; i++) {
            var playlistFromLibrary = p.get(i);
            if (playlistFromLibrary && playlistFromLibrary.name == playlistName) {
              var button = StartRadioButton.forPlaylist(playlistFromLibrary);
              document.body.appendChild(button.node);
            }
          }
        });
      });
  });
});
于 2014-02-27T10:37:46.150 回答