2013-03-11 2 views
6

필자는 진정으로 검색했으며 serializer를 사용하여 형식이 다른 JSON 응답에서 객체를 가져 오는 예의 바른 예제를 찾지 못했습니다. JSON 응답의 형식을 변경하지 않는 이유는 여기 http://flask.pocoo.org/docs/security/#json-security에 나와 있습니다.Ember 데이터 및 매핑 JSON 객체

저는 아직 javascript에 익숙하지 않아서 serialize_json.js에서 후크를 이해하지 못했을 것입니다. 또는 아마도 매핑을 사용해야합니다 (난 모르겠습니다). 그래서 여기에 많은 개체에 대한 내 JSON 응답의 예는 다음과 같습니다

{ 
    "total_pages": 1, 
    "objects": [ 
    { 
     "is_completed": true, 
     "id": 1, 
     "title": "I need to eat" 
    }, 
    { 
     "is_completed": false, 
     "id": 2, 
     "title": "Hey does this work" 
    }, 
    { 
     "is_completed": false, 
     "id": 3, 
     "title": "Go to sleep" 
    }, 
    ], 
    "num_results": 3, 
    "page": 1 
} 
엠버 데이터가 나는 다음과 같은 오류 받기 사용하려고

:

DEBUG: ------------------------------- 
DEBUG: Ember.VERSION : 1.0.0-rc.1 
DEBUG: Handlebars.VERSION : 1.0.0-rc.3 
DEBUG: jQuery.VERSION : 1.9.1 
DEBUG: ------------------------------- 
Uncaught Error: assertion failed: Your server returned a hash with the key total_pages but you have no mapping for it 

당신이 내 코드에서 볼 때 완전히한다 데이터 저장소 :

Todos.Store = DS.Store.extend({ 
    revision: 12, 
    adapter: DS.RESTAdapter.create({ 
     mappings: {objects: "Todos.Todo"}, 
     namespace: 'api' 
    }) 
}); 

내 질문은 내가 total_pages, num_resultspage 처리 어떻게입니까? 그리고 협상을 통해, 나는 단지 무시할 뜻이므로 objects 배열을 매핑 할 수 있습니다.

답변

3

JSON 결과에서 반환하는 모든 루트 속성은 Ember Data의 DS.Model에 매핑됩니다. 모델화되지 않은 속성을 반환하거나 모델링해야합니다.

오류를 없애려면 사용하지 않는 속성에 대해 빈 모델을 만들어야합니다.

더 읽기 here

왜 당신이 사용하지 않으려는 속성을 반환하는? 또는 귀하의 통제에서 벗어 났습니까?

+2

모델화되지 않은 속성을 반환 할 예정이며이를 모델링하고 싶지 않습니다. –

+1

응답을 수정할 수는 있지만 JSONSerializer로이 작업을 수행 할 수 있어야합니다. 나는 방법을 모른다. 즉, '불규칙한'JSON을 가져 와서 ember-data가 사용할 수있는 무언가로 변환하는 것이 중요하다는 의미입니다. –

+0

@Willem de Wit - 데이터베이스에 의해 추가 된 _id 및 __v 속성은 어떻습니까? 모델을 모델링해야합니까? – netpoetica

1

엠버 (Ember)는 일이 어떻게 이루어지는 지에 대해 상당히 비판적입니다. 엠버 데이터도 예외는 아닙니다. 엠버 팀은 자신이 생각하기에 가장 좋은 것으로 생각되는 특정 기준을 위해 노력합니다. 이는 제 의견으로는 좋은 것입니다.

엠버가 어디로 가고 있는지 확인하십시오. this post TL; DR은 API 호출의 구현이 매우 다양하기 때문에 JSON API을 지원하려는 노력을 기울이고 있습니다.

내 이해에서, 당신이 원하는 것을 쉽게 할 수있는 방법이 없습니다. 최선의 방법은 사용자 지정 어댑터를 작성하고 직렬화하는 것입니다. 이것은하기가 너무 어렵지 않아야하며 이전에 이루어져야합니다. 파이썬의 Django Tastypie에 사용 된 Tastypie adapter을 살펴 보길 권합니다.

1

이 작업을 수행하는 방법은 사용자 지정 serializer를 사용하는 것입니다. 모든 데이터는이 형식으로 서버에서 반환하는 경우 당신은 단순히 같은 ApplicationSerializer을 만들 수 있습니다 엠버 데이터가 원활하게 API를 소비 할 수 있도록해야한다

DS.RESTSerilizer.extend({ 
    normalizePayload: function(type, payload) { 
    delete payload.total_pages; 
    delete payload.num_results; 
    delete payload.page; 
    return payload; 
    } 
}); 

.