2013-05-28 70 views
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(軌道);對控制檯沒有任何影響。

任何提示將真的很棒這裏,謝謝!

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

    .... 

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

    .... 
}); 
+0

getTracks看起來像什麼? –

+0

只需在發佈中添加以下內容。 getTracks:function(){this.tracks.fetch(); {0} {0} return this.tracks }, –

+1

爲什麼不'getTracks:function(opts){this.tracks.fetch(opts); ...'? '_this = this'創建一個全局變量,你可能需要'var _this = this'。 –

回答

1

我找不到你在哪裏調用該回調。您可能需要修改「getTracks」的方法是這樣的:

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

這就是所謂的「回調格局」,谷歌就會發現更多。

和骨幹模型的fetch方法接受選項參數,它是一個有兩個鍵的對象 - 成功和錯誤 - 都是函數。如果你提供這個參數,主幹會自動調用它們。

希望得到這個幫助。