2013-08-05 4 views
1

Ember Data를 연결하여 기존 REST API와 연동하려고합니다. 내가 겪고있는 문제는 REST 구현이 Ember Data가 수행 할 작업을 기대하는 방식을 따르지 않는다는 것입니다. 일을 작동시키는 방법을 제안하는 문서를 웹에서 찾아 보았지만 내 자신의 DS.Adapter 구현을 작성하는 데 부족함을 보지 못했습니다. 다음과 같은 응답을 제공Emaver Data를 비표준 REST API와 함께 사용

/api/user/12345 

:

{ 
    data: { 
     ID: '12345', 
     firstName: 'Fred', 
     lastName: 'Flintstone', 
     emailAddr: '[email protected]' 
    } 
} 

엠버는 "사용자"로 "데이터"를 기대하고 여기에

내 요청이 모습입니다. 불행히도 API를 쉽게 변경할 수 없습니다. 어떤 제안?

감사

내가, 당신이 얻을 수있는 생각할 수있는 자신의 시리얼을 만들어 것와 extract 기능을 오버라이드 (override)

답변

2

한 가지 방법 :

App.RESTSerializer = DS.RESTSerializer.extend({ 
    extract: function(loader, json, type, record) { 
    var root = 'data'; 

    if (json[root]) { 
     if (record) { loader.updateId(record, json[root]); } 
     this.extractRecordRepresentation(loader, type, json[root]); 
    } 
    } 
}); 

App.Store = DS.Store.extend({ 
    adapter: DS.RESTAdapter.extend({ 
    serializer: App.RESTSerializer.create() 
    }) 
}); 

이 변경이 있다고 가정주의를 요청 내용은 항상 JSON의 data 키 아래에 있습니다.

this.sideload(loader, type, json, root); 
this.extractMeta(loader, type, json); 

이 당신 느슨한 side loading 기능과 metadata 추출한다 : 언급도 가치가

원래 extract 방법은 예에 포함되지 않은 두 개의 라인을 가지고 있다는 것입니다. 이 기능을 잃어 버리면 쇼 스토퍼 사례를 기대하지 마십시오.

희망이 있습니다.

+0

매력처럼 작동했습니다. 감사합니다. – mzabriskie

+0

@mzabriskie, 내가 도울 수있어서 기쁘다, plase는 받아 들여지는 응답을 표시하는 것을 잊지 마라. 그래서 이것에 걸려 넘어지는 사람들은 그것이 당신을 위해 일했음을 알 것이다, 감사합니다 :) – intuitivepixel

관련 문제