Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 主干回调函数,成功不触发代码_Ruby On Rails_Ajax_Backbone.js_Callback_Mouseevent - Fatal编程技术网

Ruby on rails 主干回调函数,成功不触发代码

Ruby on rails 主干回调函数,成功不触发代码,ruby-on-rails,ajax,backbone.js,callback,mouseevent,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' : 'hideT

我正在做一个简单的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>");
        });
      },

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

getTracks: function(callback) {
    this.tracks.fetch();
    callback(this.tracks); //you need to invoke the callback before return
    return this.tracks;
}
这就是所谓的“回调模式”,谷歌会发现更多

主干模型的fetch方法accept option参数,它是一个具有两个键(success和error)的对象,这两个键都是函数。如果提供此参数,主干将自动调用它们


希望有帮助。

getTracks看起来像什么?只是在帖子中添加了以下内容。getTracks:function(){this.tracks.fetch();return this.tracks},为什么不
getTracks:function(opts){this.tracks.fetch(opts).
?和
\u this=this
创建一个全局变量,您可能需要
var\u this=this
。好主意,这让我走上了正确的轨道,必须将成功回调放在fetch中,而不是get轨道中
app.models.Album = Backbone.Model.extend({

  ....

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

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