2012-09-11 2 views
7

나는 다음과 같은 Emberjs 데이터 모델이 있습니다Emberjs 데이터 어떻게 hasMany의-데이터를로드하는 데 나중에

App.File = DS.Model.extend({ 
    like: DS.attr('boolean'), 
    comments: DS.hasMany('App.Comment') 
}); 

App.Comment = DS.Model.extend({ 
    file: DS.belongsTo('App.File'), 
    comment: DS.attr('string') 
}); 

을 그리고 그것을 미리로드 :

App.store.load(App.File, {id: 1, like: false}); 
이제

내가 생각이 같은 의견을받을 경우 :

var f = App.store.find(App.File, 1); 
var c = f.get("comments"); 

var c는 ​​빈 EmberArray이며 요청이 서버로 전송됩니다. 그러나 나는 요청을받지 못합니까? 왜, 어떻게해야합니까? 나는 정말로 코멘트를 미리로드하고 싶지 않습니다.

더 나아가, 내가 코멘트를 추가 할 수 있지만 동시에 파일을 변경하는 경우 :

f.get("comments").createRecord({comment: "test"}); 
f.set("like", true); 
App.store.commit(); 

두 요청이 서버로 전송된다. 하지만 다음 JSON (파일)을 반환하면 :

{ "id": 1, like: true } 

첫 번째로 보이는 주석이 다시 사라집니다. 왜? 그리고 내가 뭘해야합니까?

도움 주셔서 감사합니다. 질문의 첫 번째 부분에 대해서는

답변

1

: 당신은 파일의 데이터에 주석 ID를 채워야 : 필요할 때

App.store.load(App.File, {id: 1, like: false, comments: [1, 2, 3]}); 

그래서 코멘트가로드 된 게으른 것입니다.

두 번째 부분에 관해서는 서버의 회신에 주석 ID를 직렬화하지 않으므로 비어있는 설명 목록을 설명 할 때 주석이 재설정됩니다.

적어도 다음과 같이 댓글 ids를 반환해야합니다 ... 두 문제가 연결되어 있습니다.

+0

빠른 답변 감사합니다. 승인. 다른 방법이 없습니까? 이 방법을 사용하면 대부분의 경우 데이터가 필요없는 SQL 쿼리를 사용할 수 있습니다. 서버에 대한 첫 번째 요청은 업데이트 된 파일에 대한 요청이므로 두 번째 문제는 도움이되지 않습니다. 두 번째 요청은 덧글 추가 요청입니다. createRecord 다음에 두 번째 commit-command를 추가하면 작동 할 수도 있습니다. –

+0

findQuery와 함께 사용되는 메커니즘을 선호합니다. comments 속성을 처음 사용할 때 findQuery가 서버로 전달됩니다. –

+1

비슷한 문제가 발생했습니다. findMany 호출에 id를 요구하는 대신 외래 키를 사용하여 findQuery를 통해 반입을 지원하면 좋을 것입니다. 필자는 findQuery를 실행하는 모델에 "getComments"메서드를 추가하기로 결정했습니다. – jhorman

0

부분은이며 어댑터의 경우 DS.Adapter.findAssociation(...) 메서드를 사용하는 것입니다. 그러나 부모 레코드가 서버에서 다시로드 될 때와 동일한 문제가 발생합니다. 모든 자식 레코드가 압축됩니다.

my own question 게시했습니다.이 항목을 분류 할 수 있는지 확인했습니다. 그 질문에 답을 얻는다면, 아마 당신 대답이 될 것입니다.