骨干回调函数,成功不触发代码

时间:2013-05-28 00:22:40

标签: ruby-on-rails ajax backbone.js callback mouseevent

我正在进行简单的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
  },

  ....
});

1 个答案:

答案 0 :(得分:1)

我找不到你在哪里调用那个回调。您可能需要修改“getTracks”方法,如下所示:

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

这称为“回调模式”,谷歌会发现更多。

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

希望这有帮助。