我正在进行简单的AJAX调用,将相册的曲目附加到无序列表中。它将使用以下代码在第二次单击时附加曲目:
window.app.views.AlbumView = Backbone.View.extend({...
events: {
'click .queue-add' : 'selectAlbum',
'click .show-tracks' : 'showTracks',
'click .hide-tracks' : 'hideTracks',
},
showTracks: function(){
_this = this
this.model.getTracks().forEach(function(track){
_this.$el.find('.tracks').append("<li>"+track.attributes.title+"</li>");
});
},
显然,第一次点击时没有及时获取曲目,所以我在showTracks方法中添加了一个回调函数,如下所示:
showTracks: function(){
_this = this
this.model.getTracks({
success: function(tracks){
console.log(tracks);
tracks.forEach(function(track){
_this.$el.find('.tracks').append("<li>"+track.attributes.title+"</li>");
});
}
});
},
然而它不会进入块和console.log(轨道);没有任何东西给控制台。
这里的任何提示都非常棒,谢谢!!
app.models.Album = Backbone.Model.extend({
....
getTracks: function() {
this.tracks.fetch();
return this.tracks
},
....
});
答案 0 :(得分:1)
我找不到你在哪里调用那个回调。您可能需要修改“getTracks”方法,如下所示:
getTracks: function(callback) {
this.tracks.fetch();
callback(this.tracks); //you need to invoke the callback before return
return this.tracks;
}
这称为“回调模式”,谷歌会发现更多。
和骨干模型的fetch方法接受选项参数,它是一个有两个键的对象 - 成功和错误 - 都是函数。如果您提供此参数,骨干网将自动调用它们。
希望这有帮助。