0

我正在做一个简单的 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(tracks); 什么都不放在控制台上。

任何提示在这里都会非常棒,谢谢!!

app.models.Album = Backbone.Model.extend({

  ....

  getTracks: function() {
    this.tracks.fetch();
    return this.tracks
  },

  ....
});
4

1 回答 1

1

我找不到您在哪里调用该回调。您可能需要像这样修改“getTracks”方法:

getTracks: function(callback) {
    this.tracks.fetch();
    callback(this.tracks); //you need to invoke the callback before return
    return this.tracks;
}

这被称为“回调模式”,谷歌它会找到更多。

并且主干模型的 fetch 方法接受选项参数,它是一个具有两个键的对象——成功和错误——都是函数。如果您提供此参数,主干将自动调用它们。

希望这有帮助。

于 2013-05-28T08:45:19.027 回答