2012-10-26 2 views
4

ember와 함께 재생하는 동안 동시에 부모와 자식을 모두 저장하려고했습니다. 내가 발견 한 것은 아이의 parent_id가 항상 nil로 설정되었다는 것입니다.Ember-Data에서 prent 및 child를 한 번에 저장

그런 다음 GitHub에서 this issue을 보았습니다. Ember-Data에서 기능이 제거 된 것 같지만 나중에 보류됩니다. 그때까지 우리는 이것을하기 위해 우리 자신의 어댑터를 굴려야합니다.

@ tomdale의 답변을 읽는 것만으로도 구현하기가 어려울 것 같지 않지만 몇 가지 구현 관련 질문이 있습니다.

레코드 belongsTo 연결이 변경된시기를 어떻게 알 수 있습니까? 그리고 어떤 어댑터 걸이가이 아래에 갈까요?

감사합니다.

+0

지금 당장은 사무실에서 다른 것을 개발해야하는데,이 어댑터를 필요로하기 때문에 이것을 보려고합니다. 우리는 didSaveRecord https://github.com/emberjs/data/blob/master/packages/ember-data/lib/adapters/rest_adapter.js#L34를 사용자 정의해야한다고 생각합니다. Tom은 순서에 따라 종류 의존성 그래프를 작성한다고 말합니다. 부양 기록을 기다리는 것 ... 그렇게 쉽게 말하기 쉽지만, 나를 위해, 분명히하기가 어렵습니다. –

+0

이것은 직접 귀하의 질문에 대답하지 않지만 이것에 대한 나의 해결책은 부모를 먼저 저장하고 응답 기록을 관찰 한 다음 json 응답을 사용하여 자식에 부모를 설정 한 다음 자식을 커밋하는 것입니다. 그 반대도 가능합니다. – mehulkar

+0

@MehulKar는 솔루션을 보여주는 코드로 답변을 게시 할 수 있습니까? – Intentss

답변

0

저장소는 특수한 개체와의 관계 변화를 추적합니다. 다음과 같은 관계에 대한 변경 개체를 저장소에 요청할 수 있습니다.

store.relationshipChangeFor(child.get('clientId'), belongsToAssociationName); 

변경하지 않으면 아무 것도 반환하지 않습니다.

하지만 그렇게 할 필요는 없을 것입니다. 관계형 데이터 저장소의 경우 하위 레코드는 belongsTo 연결을 유지해야합니다. 작성/업데이트가 성공적으로 완료되면 해당 관계를 모두 맹목적으로 표시 할 수 있으며 저장소 중 일부가 실제로 더럽지 않은 경우 저장소에서 문제가되지 않습니다.

는 사실, 그 DS.RESTAdapternow을 수행 정확히 무엇 :

DS.RESTAdapter = DS.Adapter.extend({ 
    // ... 

    didSaveRecord: function(store, record, hash) { 
    record.eachAssociation(function(name, meta) { 
     if (meta.kind === 'belongsTo') { 
     store.didUpdateRelationship(record, name); 
     } 
    }); 

    store.didSaveRecord(record, hash); 
    } 

    // ... 
}); 

때마다 당신이 결정할 때마다 당신은 관계 해결로, 단순히 store.didUpdateRelationship(child, belongsToAssociationName) 전화를 표시 할 준비가되었습니다.


이 모든 것은, 진짜 트릭 - 그것은 부모가 생성 된 때까지 아이의 저장을 지연에서의 (즉, 이미 구현 이후) 해결로 관계를 표시하지 않을 말했다되고.

실제로는 단지 a pull request을 제출했습니다. 도움이된다면 도움이 될 것입니다. 요청에 대해 지원해 주시면 감사하겠습니다.