2

我有一些看起来像这样的 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 任何帮助表示赞赏!

4

1 回答 1

0

列表在发送“已初始化”事件之前并未完全初始化。在初始化期间,属性被设置为列表的 DOM 元素,稍后由 setItem 等函数读取。该过程依赖于几个异步调用,这就是为什么在运行 setItem 时无法保证已设置属性的原因。

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

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

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

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

更新:此 API 已于 2014 年终止使用,不再使用。

于 2013-07-02T19:18:44.043 回答