2013-03-16 39 views
0

我正在使用Spotify的Apps API的v1.0預覽版。當嘗試通過提供List.forPlaylist(list,opt_options)的opt_options參數來創建自定義列表時,我得到有關未找到DOM元素的錯誤。這幾乎可以肯定是由於我的天真實施。Spotify預覽應用列表視圖getItem

我的問題是沒有人有一個如何使用這個opt_options自定義getItem函數的例子嗎?該文件不清楚我的意思是返回或填充。

我實現(在播放列表是加載列表):

listView.forPlaylist(playlist, { getItem : function (item, index) { 
      console.log(item); 
      console.log(index); 
      return $("<span>hello, world</span>"); 
     } 
    } 

這個錯誤每次:

DOMException code: 8 message: "NOT_FOUND_ERR: DOM Exception 8" name: 
"NOT_FOUND_ERR" stack: "Error: An attempt was made to reference a Node 
in a context where it does not exist.? at f.createItems 
($views/scripts/list/view.js:16:147)? at e.b 
($views/scripts/list.js:16:102)? at e.Observable.dispatchEvent 
($api/scripts/models.js:4:322)? at Promise.f.snapshot 
($views/scripts/list/model.js:9:244)? at Promise.done 
($api/scripts/models.js:6:157)? at f.snapshot 
($views/scripts/list/model.js:7:241)? at e.more 
($views/scripts/list.js:4:138)? at f.moreWithLimit 
($views/scripts/list/model.js:17:127)? at f.checkResizeEdge 
($views/scripts/list/view.js:13:457)? at f.init.b 
($views/scripts/list/view.js:3:3)" 

任何歡迎的想法。一個例子,更是如此;-)

回答

1

你應該返回一個DOM元素,而不是一個jQuery對象。對於這一點,你需要返回

$("<span>hello, world</span>")[0]; 

,而不是返回

$("<span>hello, world</span>"); 

您有關於jQuery object and DOM element它們之間的區別更多的信息。

在這裏,你有你將如何在你的Spotify應用注入List view一個完整的例子:

require([ 
    '$api/models', 
    '$views/list#List' 
], function (models, List) { 
    'use strict'; 

    var playlist = models.Playlist.fromURI('spotify:user:nowplaylist:playlist:6QHyDeqaPNZ0nyLFJbSKTL'); 
    var listView = List.forPlaylist(playlist, { 
    getItem : function (item, index) { 
     console.log(item); 
     console.log(index); 
     return $("<span>hello, world</span>")[0]; 
    } 
    }); 

    document.body.appendChild(listView.node); 
    listView.init(); 
}); 
+0

這是偉大的感謝@JMPerez - 如果有任何類似的0.X軌跡視圖所使用的任何想法讓這麼簡單? :-)它似乎完全缺失。 – AndyElastacloud 2013-03-16 10:46:29

+1

@AndyBareWeb在1.0中沒有跟蹤視圖afaik。你想要一個Track看起來像什麼,你需要一個自定義渲染器? – 2013-03-16 11:30:26

+0

我想渲染一個按鈕作爲一個額外的列 - 與0.x API我做了以下 返回新的views.List(播放列表,功能(軌道){ var trackEx = new views.Track(track, views。 Track.FIELD.NAME | views.Track.FIELD.STAR | views.Track.FIELD.ARTIST | views.Track.FIELD.DURATION); $(trackEx.node).append( 「我的自定義按鈕」 ); return trackEx; }); – AndyElastacloud 2013-03-16 11:54:05