2012-09-07 3 views
1

나는 백본을 사용하여 응용 프로그램을 가지고 있지만 내가 컬렉션의 fetch() 메소드를 호출 할 때마다 그것은 정의되지 않은 반환백본 - 컬렉션 가져 오기가 정의되지 않은 값을 반환합니까?

// App 

(function() { 

    window.app = {}; 
    app.collections = {}; 
    app.models = {}; 
    app.views = {}; 

    $(function() { 
     app.collections.complaintTypes = new app.collections.ComplaintTypesCollection(); 
     app.views.complaintTypesView = new app.views.ComplaintTypesView({ collection: app.collections.complaintTypes }); 
    }); 

})(); 

// Collections 

(function (collections, model) { 
    collections.ComplaintTypesCollection = Backbone.Collection.extend({ 
     initialize: function() { 
      this.fetch(); 
     }, 
     model: model, 
     url: '/api/ComplaintTypes' 
    }); 
})(app.collections, app.models.ComplaintType); 

// Models 

(function (models) { 
    models.ComplaintType = Backbone.Model.extend({ 
     idAttribute: 'ComplaintTypeId' 
    }); 
})(app.models); 


// Views 

(function (views) { 
    views.ComplaintTypesView = Backbone.View.extend({ 
     initialize: function() { 
      this.collection.on('reset', this.render, this); 
     }, 
     render: function() { 
      console.log(this.collection); 
     } 
    }); 
})(app.views); 

하지만 아무것도 반환하지 않습니다? 피들러를 사용하고 내 URL :/api/ComplaintTypes로 이동하면 데이터가 다시 검색되므로 어떤 일이 잘못되었는지 잘 모르겠습니다.

+0

정확하게 오류 메시지는 무엇입니까? 이 코드는 오류를 생성하는 코드 행과 정확히 일치합니까? – fguillen

+0

오류는 다음과 같습니다. '잡히지 않은 유형 오류 : 정의되지 않은 함수입니다 .' 코드 줄이 Backbone.js 줄에 있습니다. 815 – CallumVass

+0

JavaScript 콘솔을 사용하여 _backtrace_ 오류를 확인하고 해당 코드의 첫 줄을 찾습니다. 목록에 있습니다. – fguillen

답변

0

가져 오기가 비동기입니다. 당신은 결과를 얻을해야하는 경우 즉, "성공"핸들러를 전달해야

function myHandler(models) { 

} 
... 
this.fetch({success: myHandler}); 
1

나는 문제가 컬렉션을 가져되지 않은 상태에서하기 때문에 JS의 비동기의 (아직 뷰를 만드는 것이 생각 행동). 다음과 같이 시도하십시오.

$(function() { 
    app.collections.complaintTypes = new app.collections.ComplaintTypesCollection(); 
    app.collections.complaintTypes.fetch({success:function(){ 
     app.views.complaintTypesView = new app.views.ComplaintTypesView({ collection: app.collections.complaintTypes }); 
    }});  
}); 

그리고 컬렉션에서 초기화 기능을 제거하십시오.

+0

방금 ​​시도했지만 동일한 오류가 발생합니다. 나는 심지어 성공 함수 안에 console.log를 넣는다. 아무 것도 출력하지 않는다. – CallumVass

+0

그럼 fetch 메서드에서 오류가 발생한다. 성공 콜백 뒤에 에러 콜백을 추가하여 다음과 같은 결과를 얻으려고한다 :'error : function() { console.log ("오류가 있습니다!");} – Ingro

+0

여전히 동일한 문제가 내 오류/성공 콜백에 도달하지 않는 것 같습니다. – CallumVass

3

컬렉션 파일에서 "모델"행을 삭제하면 효과적입니다.

+0

이 작업 됨 나도. 하지만 왜 그런지 모르겠습니다. –

+1

형제, 줄을 삭제하는 것은 해결책이 아닙니다. 상황을 악화시키는 것뿐입니다. 여기서 문제는 "모델"기능이 발생하기 전에도 "수집"기능이 실행된다는 것입니다. 결과적으로 모델 "모델"은 실행시 사용할 수 없습니다. Collection 함수 앞에 Model 함수를 작성하십시오. 이것은 나를 도왔다. – gca

관련 문제