2013-05-28 2 views
0

정렬되지 않은 목록에 앨범 트랙을 추가하는 간단한 AJAX 호출을 수행하고 있습니다.백본 콜백 함수, 성공 코드를 트리거하지 않음

: 그래서 지금처럼 showTracks 방법에 콜백 함수를 추가

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: 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(); 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 메서드는 옵션 인수를받습니다. 두 개의 키 - 성공과 오류 -가 모두 기능하는 개체입니다. 이 인수를 제공하면 백본이 자동으로이를 호출합니다.

희망이 도움이됩니다.

관련 문제