2012-11-05 3 views
3

백본 컬렉션을 사용하여 서버에서 mongodb 컬렉션을 가져옵니다. id는 '_id'로 저장되기 때문에 idAttribute를 사용하여 '_id'로 매핑합니다.컬렉션을 가져올 때 idAttribute가 설정되지 않음

(function(){ 
    var PlaceModel = Backbone.Model.extend({ 
    idAttribute: "_id", 
    }); 
    var PlaceCollection = Backbone.Collection.extend({ 
    url: "http://localhost:9090/places", 
    initialize: function(options){ 
     var that = this; 
     this.fetch({ 
     success: function(){ 
      console.log("Success!", that.toJSON()); 
     }, 
     error: function(){ 
      console.log("Error"); 
     } 
     }); 
    } 
    }); 

    var place = new PlaceCollection({model:PlaceModel}); 

}()); 

는 그러나 나중에 나는 그것이 항목을 삭제하는 시간 때 모델의 'idAttribute'를 액세스 할 때에, 그것은에서 this.model.isNew()를 의미 대신 '_id'의 'ID를'반환 view는 서버에서 가져온 모든 레코드에 대해 'true'를 반환합니다. 따라서 서버에 항목을 삭제하거나 PUT 할 수 없습니다.

내가 (대신 PlaceModel 정의 내부의)이 같은 프로토 타입을 사용하여 idAttribute을 설정하지만 경우 :

Backbone.Model.prototype.idAttribute = "_id"; 

은 그럼 제대로 '_id'에 idAttribute를 매핑하고 모든 작동합니다. 무슨 일이 일어날까요?

답변

7

는 당신이 말할 때 :

var place = new PlaceCollection({model:PlaceModel}); 

같은, 다소,이 말 :

var o  = new Backbone.Model({ model: PlaceModel }); 
var place = new PlaceCollection([ o ]); 

당신은 컬렉션 "클래스"의 model 속성을 설정하지 않는 것을, 하나의 모델 (Backbone.Model 인스턴스가 아닌 PlaceModel이 아닌)이 포함 된 컬렉션을 만들고 그 모델의 값은 PlaceModelmodel입니다.

그래서이 컬렉션은 그 모델이 idAttribute: "_id"이거나 심지어 그 모델이 PlaceModel으로되어 있다고 생각하지 않습니다. place을 만들 때가 아니라 PlaceCollection을 만들 때 model을보고 싶다면

관련 문제