2012-02-22 89 views
1

我建立一個Spotify應用有四個標籤頁。所有選項卡的內容在應用程序的初始加載時加載。每個選項卡包含正在填充有來自第三方網站的API,被分解成Spotify的軌道數據的一個或多個播放列表。Spotify應用API:標籤頁,播放列表UI刷新

所選擇的選項卡工作正常。該播放列表顯示預期。問題在於最初隱藏但稍後選中的選項卡。在這裏,播放列表看起來像這樣選擇時:

not fully rendered playlist

展望督察我可以看到,內容尚未呈現:

<div class="sp-list sp-light" tabindex="0"> 
<div style="height: 100px; "> 
</div> 
</div> 

當我做Spotify的桌面應用程序的大小調整,播放列表終於呈現:

rendered playlist after resize

要填充我用的播放列表ŧ他「標準」 Spotify的模型和視圖:

var playlist = new views.List(tempPlaylist); 
//where tempPlaylist is a new models.Playlist(); 
//that has been populated with tempPlaylist.add(search.tracks[0].uri); 

playerPlaylistDiv.append(playlist.node); 

使用標籤時我只seing這個問題。在一個長頁面上顯示所有內容時,所有播放列表都將完全呈現。我不知道是否有時間做的事:那我隱藏了尚未完全呈現的內容?任何想法非常感謝。

我處理這樣標籤的變化:

/* 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。

回答

0

我不知道這是同樣的事情,但我遇到了類似的問題試圖創建從上飛播放列表-URI的tracklistings;也無法追蹤它(包含的DOM肯定已經渲染並準備就緒);它只發生在某些播放列表上,從來沒有在相冊上。

我能夠「克隆」播放列表circumentvent這個問題 - 顯然有一個「表演」打...

// assuming uri is the playlist's URI 
models.Playlist.fromURI(uri, function(originalPlaylist) { 
    var tempPlaylist = new model.Playlist(); 
    $.each(originalPlaylist.tracks, function(t) { tempPlaylist.add(t); }); 
    var tracklist = new views.List(tempPlaylist); 
    // etc... 
} 

我不知道什麼是放在這裏,但也許可以幫助你一起:)

PS。此外 - 確保你有index.html中一個DOCTYPE聲明(),Spotify的客戶做一些奇怪的事情,如果你不這樣做。

0

我已經找到了解決辦法是這樣的:

我箭頭它歸結爲是與顯示/隱藏的內容,因爲顯示了不帶標籤的所有內容都不會出現問題的問題。因此,而不是使用.show()/隱藏()我現在隱藏和各部分的高度設置爲100%/ 0展示的內容:

// Hide all other sections 
$("section#" + args).siblings().height('0'); 

// Show current section 
$("section#" + args).height('100%'); 

不知道爲什麼這個工程,但它確實(至少對我來說)。

0

我想我已經設法解決這個問題,我認爲它是防彈的。

基本上,我試圖通過試圖說服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的功能和列表更新。希望這可以幫助別人!

相關問題