【问题标题】:Backbone callback functions, success not triggering code骨干回调函数,成功不触发代码
【发布时间】:2013-05-28 00:22:40
【问题描述】:

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

  ....
});

【问题讨论】:

  • getTracks 长什么样子?
  • 刚刚在帖子中添加了以下内容。 getTracks: function() { this.tracks.fetch();返回 this.tracks },
  • 为什么不getTracks: function(opts) { this.tracks.fetch(opts); ...?而_this = this 创建一个全局变量,你可能想要var _this = this
  • 好主意,这让我走上了正轨,必须将成功回调放在 fetch 中,而不是 get 轨道中

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


【解决方案1】:

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

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

这叫做“回调模式”,google一下会找到更多。

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

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多