我有一些Spotify应用代码,如下所示:

require(['$api/models', '$views/list#List', '$api/search#Search'], function(models, List, Search) {

var testList = function(){
    var album = models.Album.fromURI('spotify:album:6iBEe3qEjdIRz38swH7jT0');
    console.log(album);
    var list = List.forAlbum(album);
    document.body.appendChild(list.node);
    list.init();
    var al2 = models.Album.fromURI('spotify:album:5fTBlCZFI4zYOdJn1NrLgt');
    list.setItem(al2);
};

testList();

});


在Spotify应用中运行它时,出现以下错误:

Uncaught TypeError: Cannot read property 'null' of undefined core.js:4


如果有帮助,这是List.setItem()的源代码:

function (a,b){if(!this.destroyed){var c=
this,d=a instanceof f.Collection;b&&(this.options.context=b);!this.lists&&d?(this.model.setCollection(a),this.dispatchEvent({type:"set-item",item:a}),this._resetContextGroup(),this.refresh()):(this.lists&&this._callForEachList("destroy"),this.destroy(),this.addEventListener("list-init",function g(){c.removeEventListener("list-init",g);c.dispatchEvent({type:"set-item",item:a});this._resetContextGroup();c._oldParentNode&&c._oldParentNode.appendChild(c.node);this.init()}),d?this._init(a):this._loadItem(a),
this.destroyed=!1)}}


我正在使用API​​版本1.0.0和视图1.35.0。
List类的文档在这里:https://developer.spotify.com/docs/apps/views/1.0/list-list.html
任何帮助表示赞赏!

最佳答案

列表只有在分派“已初始化”事件后才能完全初始化。在初始化期间,将属性设置为列表的DOM元素,稍后由诸如setItem之类的函数读取。该过程取决于几个异步调用,这就是为什么您不能保证在运行setItem时已设置属性的原因。

如果您想知道列表何时完全加载,可以订阅列表的“初始化”事件。

list.addEventListener("initialized", function(e) {
    console.log("List is initialized");
});


(当然,您也可以通过在setTimeout中以足够大的延迟运行setItem来尝试此操作。)

我认为在运行列表的init函数后,预计不会在这么短的时间内使用setItem,这就是为什么在大多数用例中这都不是问题。我相信setItem通常是由用户的某些操作触发的。参考站点上的示例有点不幸。

更新:该API于2014年到期,并且不再使用。

08-17 13:41