2012-11-06 2 views
3

ember.js 및 couch DB 백엔드를 사용하는 응용 프로그램에서 작업하고 있습니다. 지금까지 데이터베이스 드라이버로 ember-resource를 사용했지만, 지속 가능성이 높은 것으로 보아 ember-data로 전환하는 것을 고려하고 있습니다.ember-data 및 couchdb-adapter를 사용하여 한 요청에서 포함 된 객체를 가져 오는 방법

저는 소파 DB로 작업하고 있으므로 Couch DB-Adapter을 사용하고 있습니다.

내 데이터베이스의 문서에는 완전한 개체 구조가 포함되어 있으므로 데이터베이스 드라이버에 포함 된 개체를 지정해야합니다.

비록 내 하위 개체를 포함 된 것으로 지정하지만, ember 데이터는 주 json에서 개체를 가져 오는 대신 별도의 요청으로 이러한 개체를 가져 오는 것 같습니다.

App.UserProfile = DS.Model.extend({ 
    type:    DS.attr('string'), 
    fullname:   DS.attr('string'), 
    email:    DS.attr('string'), 
    pictureUrl:  DS.attr('string'), 
    social:   DS.hasMany('App.SocialWebAccount', { embedded: true }), 
    ..... 
}); 

App.SocialWebAccount = DS.Model.extend({ 
    profile: DS.belongsTo('CaiMan.UserProfile'), 
    site: DS.attr('string'), 
    account: DS.attr('string'), 
    ..... 
}); 

과 같은 서버 데이터 IST 뭔가 : 로딩 후

{ 
    "_id": "thoherr", 
    "_rev": "55-d4abcb745b42fe61f1a2f3b31c461cce", 
    "type": "UserProfile", 
    "fullname": "Thomas Herrmann", 
    "email": "[email protected]", 
    "pictureUrl": "", 
    "social": [ 
     { 
      "site": "socialFacebook", 
      "account": "thoherr" 
     }, 
     { 
      "site": "socialXing", 
      "account": "Thomas_Herrmann7" 
     }, 
     { 
      "site": "socialEmail", 
      "account": "[email protected]" 
     } 
    ] 
} 

에서, 사용자 프로필이 내 소셜 데이터, 대한 모두 ArrayProxy를 포함하지 다음과 같이

내 개체 정의

은 세 항목으로 채워지지만 SocialWebAccount 인스턴스 대신 모두 정의되지 않았습니다.

이 배열에 액세스하려고하면 ember-data가 데이터를 가져 오기 위해 별도의 데이터베이스 액세스를 수행하는 것으로 보이므로 couch DB 어댑터가 정의되지 않은 _id 필드에 액세스하기 때문에 오류가 발생합니다 ....

나는 무엇이 누락 되었습니까?

"임베디드"플래그는 데이터가 이미 json에 있음을 알리고 객체는 json에서 인스턴스화 할 수 있다고 생각 했습니까?

왜 ember-data가 포함 된 데이터를 가져 오려고합니까?

힌트가 있습니까?

답변

3

최근에 포함 된 옵션이 변경된 것으로 보입니다. 나는 ember-data github에서 test files에있는 정보를 발견했습니다. 이 테스트 파일에서

가 포함 된 내용이

Comment = App.Comment = DS.Model.extend({ 
    title: attr('string'), 
    user: DS.belongsTo(User) 
}); 

Post = App.Post = DS.Model.extend({ 
    title: attr('string'), 
    comments: DS.hasMany(Comment) 
}); 
Adapter = DS.RESTAdapter.extend(); 
Adapter.map(Comment, { 
    user: { embedded: 'always' } 
}); 

또는

Adapter = DS.RESTAdapter.extend(); 
Adapter.map(Comment, { 
    user: { embedded: 'load' } 
}); 
예를 들어 이

'항상'IDS (귀하의 경우)없이 포함 된 데이터에 사용되는 것 같다 ,

과 같이 정의된다
id: 1, 
title: "Why not use a more lightweight solution?", 
user: { 
    name: "mongodb_expert" 
} 

ids가 포함 된 데이터에 'load'가 사용 된 것 같습니다.

id: 1, 
user: { 
    id: 2, 
    name: "Yehuda Katz" 
} 

귀하의 특별한 경우에 도움이 될 것입니다. 나는 hasMany 관계에 많은 어려움을 겪어왔다. 최근에 나는 (내 어댑터를 수정해야만했다.)