Spotify应用程序API:选项卡页面、播放列表UI刷新
我正在构建一个带有四个标签页的Spotify应用程序。所有选项卡的内容在应用程序的初始加载时加载。每个选项卡都包含一个或多个播放列表,其中包含来自第三方web API的数据,这些数据被解析为spotify曲目 所选选项卡工作正常。播放列表将显示预期的播放列表。问题在于最初隐藏但后来选择的选项卡。此处选择时播放列表如下所示: 查看Inspector,我可以看到内容尚未呈现:Spotify应用程序API:选项卡页面、播放列表UI刷新,spotify,Spotify,我正在构建一个带有四个标签页的Spotify应用程序。所有选项卡的内容在应用程序的初始加载时加载。每个选项卡都包含一个或多个播放列表,其中包含来自第三方web API的数据,这些数据被解析为spotify曲目 所选选项卡工作正常。播放列表将显示预期的播放列表。问题在于最初隐藏但后来选择的选项卡。此处选择时播放列表如下所示: 查看Inspector,我可以看到内容尚未呈现: <div class="sp-list sp-light" tabindex="0"> <div st
<div class="sp-list sp-light" tabindex="0">
<div style="height: 100px; ">
</div>
</div>
我只是在使用标签时才发现这个问题。在一个长页面上显示所有内容时,所有播放列表都会完全呈现。我想知道这是否与时间有关:我正在隐藏尚未完全呈现的内容?非常感谢您的任何想法
我通过以下方式处理选项卡更改:
/* Handle URI arguments */
models.application.observe(models.EVENT.ARGUMENTSCHANGED, tabs);
/* Handle tab changes */
function tabs() {
var args = models.application.arguments;
// Hide all sections
$('section').hide();
// Show current section
$("#" + args[0]).show();
}
仅供参考,我正在使用Spotify预览版0.8.10.3。我不确定这是否是同一件事,但我在尝试从播放列表URI动态创建曲目列表时遇到了类似问题;也无法更近地追踪它(包含的DOM肯定已呈现并准备就绪);它只出现在某些播放列表中,从未出现在专辑中 我可以通过“克隆”播放列表来绕过这个问题-显然有一个“性能”热门 我不确定这是怎么回事,但也许这对你有帮助:)
另外,请确保在index.html()中有doctype声明,否则spotify客户端会做一些奇怪的事情。我找到的解决方案是: 我把它归结为显示/隐藏内容的问题,因为显示没有选项卡的完整内容不会导致问题。因此,我现在不使用.show()/.hide()而是通过将节的高度设置为100%/0来隐藏和显示内容:
// Hide all other sections
$("section#" + args).siblings().height('0');
// Show current section
$("section#" + args).height('100%');
不知道为什么会这样,但它确实起作用了(至少对我来说)。我也有同样的问题(请参阅),并通过在任何处理之前对div执行hide()/show()来修复它。之前我正在构建播放列表,然后显示div,然后显示一个空白列表。我想我已经成功地解决了这个问题,我认为它是防弹的 基本上,我试图通过让API相信它需要通过隐藏内容/滚动内容/移动内容来重新绘制播放列表来解决这个问题,这些内容偶尔会起作用,但从来不会始终如一。我从未想过要更改播放列表本身。或者至少让API认为播放列表已更改 可以通过在播放列表对象上触发事件来执行此操作
var models = sp.require('$api/models');
...
// playlist is your Playlist object. Usually retrieved from models.Playlist.fromURI
playlist.notify(models.EVENT.CHANGE, playlist);
这些只是标准的Spotify功能,列表会更新,因为它认为播放列表中发生了变化。希望这对别人有帮助
// Hide all other sections
$("section#" + args).siblings().height('0');
// Show current section
$("section#" + args).height('100%');
var models = sp.require('$api/models');
...
// playlist is your Playlist object. Usually retrieved from models.Playlist.fromURI
playlist.notify(models.EVENT.CHANGE, playlist);