2014-04-17 6 views
0

각도와 MongoDB와 함께 Breeze를 사용하고 있습니다.Breeze Mongo 각도 autoGeneratedKey 오류

각도 및 MongoDB에서 breeze가 작동하는지 확인하기 위해 필요한 모든 서비스와 스크립트가 포함되었습니다. 그러나

, 나는 서버에 다음과 같은 오류가 내 변경 내용을 저장하려고하면

var keyDataType = entityType.keyDataType; 
      if (keyDataType === "Guid") { 
       e._id = createGuid(); 
      } else if (keyDataType == "MongoObjectId") { 
       // instead of omitting the _id and having mongo update it, we want to set it ourselves so that we can do 
       // fk fixup before going async 
       e._id = new ObjectID(); 
      } else { 
       that._raiseError(new Error("ObjectIds and Guids are the only autoGenerated key types that Breeze currently supports, not: " + keyDataType)); 
       return; 
      } 

:이 오류는 mongobreeze 모듈의 mongoSaveHandler.js 파일에서 발생

ObjectIds and Guids are the only autoGenerated key types that Breeze currently supports, not: undefined 

나는 내 물건의 ID가 몽고 ID인지 확인했다. ID :

function addVisit() { 
    addType({ 
     name: 'Visit', 
     dataProperties: { 
      id: { type: DT.MongoObjectId }, 
      pain: { type: ID }, 
      paper: {type: ID}, 
      consistency: {type: ID} 
     } 
    }); 
} 

그러나 실제로 내가 기록 할 때 entityType 객체에는 keyDataType 속성이 없습니다.

오류를 제거하면 작동하도록 모든 것을 얻을 수 있습니다. 그런 다음 삽입 된 객체가 MongoDB에서 다음과 같이 보입니다.

{ id: 5350d4e704a02e1f04000000, 
pain: 50, 
consistency: 50, 
date: Fri Apr 18 2014 08:31:51 GMT+0100 (WEST), 
_id: 5350d4e7101b04a9560e660a }, 

의미있는 2 개의 ID가 있습니까?

나는 내가 좋은 반응을 얻을 데이터베이스 쿼리 할 때 :

[ 
    { 
    "id": "535052f504a02e79c6000000", 
    "pain": 50, 
    "consistency": 50, 
    "_id": "535052f6f672174a4dffffd4" 
    }, 
    { 
    "id": "5350d1bb04a02e4e56000000", 
    "pain": 50, 
    "consistency": 50, 
    "date": "2014-04-18T07:18:19.616Z", 
    "_id": "5350d1bb101b04a9560e6606" 
    }, 
    { 
    "id": "5350d2c104a02e595c000000", 
    "pain": 50, 
    "consistency": 50, 
    "date": "2014-04-18T07:22:41.696Z", 
    "_id": "5350d2c1101b04a9560e6607" 
    }, 
] 

을하지만 어떻게 든 바람이 제대로이 문제를 가져올 수 없습니다 내가이 순환 종속성을받을.

enter image description here

이 아이디의 이중와 함께 할 수있는 뭔가가 있을까?

+0

첨부 이미지가 OK입니다. breeze의 모든 엔터티에는 entityAspect가 있습니다. EntityAspect는 차례대로 엔티티에 대한 참조를 가지고 있습니다. Breeze는 순환 참조와 잘 작동합니다. EntityAspect 문서를보십시오. http://www.breezejs.com/sites/all/apidocs/classes/EntityAspect.html –

+0

흠, 볼 수 있지만 각도를 사용하여 표시하려고하면 순환 종속성 때문에 보간 오류가 발생합니다. – arnoutaertgeerts

+0

각도 바인딩에 관해서 순환 참조가있는 객체를 처리 할 수 ​​없습니다. breeze 엔티티에서 다른 javascript 객체로 원호 참조없이 투영을해야합니다. –

답변

0

어디에서 DT.MongoObjectId를 가져 왔습니까? 그것은 breeze 문서에 지원되는 데이터 유형으로 나열되지 않으므로 형식으로 정의되지 않은 값을 반환합니다. Id를 제대로 생성한다면 왜 불변 인 문자열을 사용하지 않을까요?

id : { type: DT.String } 
+0

breeze.dataservice.mongo.js가 패치했지만 Guid에서도 작동하지 않습니다. – arnoutaertgeerts

0

봅니다 몽고의 "_id" 그 반대에 바람의 "id" 필드를 변환 할 명명 규칙을 설정합니다. 그것은 제거합니다 이중 ID의
여기 클라이언트 측의 코드입니다 :

var convention = new breeze.NamingConvention({ 
    serverPropertyNameToClient: function (serverPropertyName) { 
     switch (serverPropertyName) { 
      case '_id': 
       return 'id'; 
      default : 
       return serverPropertyName; 
     } 
    }, 
    clientPropertyNameToServer: function (clientPropertyName) { 
     switch (clientPropertyName) { 
      case 'id': 
       return '_id'; 
      default: 
       return clientPropertyName; 
     } 
    } 
}); 

convention.setAsDefault();