2017-12-19 24 views
0

Ember 모델 중 하나에서 일부 중첩 데이터에 액세스하는 데 문제가 있습니다. 다음은 JSON 응답은 ... Ember 중첩 데이터 (JSON 응답)

{ 
    "fields": { 
    "header": { 
     "name": "header", 
     "type": "text", 
     "localize": false, 
     "options": [] 
    }, 
    "body": { 
     "name": "body", 
     "type": "textarea", 
     "localize": false, 
     "options": [] 
    } 
    }, 
    "entries": [ 
    { 
     "header": "header test", 
     "body": "body test body test body test", 
     "_mby": "5a395e8430c2ddoc683600766", 
     "_by": "5a395e8430c2ddoc683600766", 
     "_modified": 1513709605, 
     "_created": 1513709605, 
     "_id": "5a3960253d578doc735798511" 
    } 
    ], 
    "total": 1 
} 

여기에 내 템플릿의 항목을 얻으려고

import DS from 'ember-data'; 

export default DS.RESTSerializer.extend({ 
    normalizeResponse(store, primaryModelClass, payload, id, requestType) 
    { 
    payload = { 
     entries: payload.entries 
    }; 
    return this._super(store, primaryModelClass, payload, id, requestType); 
    } 
}); 

내 현재 시리얼입니다. 아마도 NormalizeResponse를 사용하여 더 쉽게 직렬화 할 수있는 도움이 필요합니까? 나는 아주 곤란하다 그래서 당신이 아이디어가있는 경우에 공유하십시오!

감사합니다.

+0

"내 템플릿에서 항목을 가져 오려고합니다." 방법? 실제로 문제가있는 것은 무엇입니까? –

+0

여러 가지 방법을 시도해 보겠습니다. 내가 생각했던 것, 항목 : DS.attr(); , 모델에서는 그렇지 않습니다. 나는 심지어 지금 모델을 지나칠 수 없다. .. –

+0

기다림, 무엇? 위의 코드에서 나는 다른 모델의 속성이 아니라'entry' _is_ 모델을 생각했습니다. (결국 ID를 가진 유일한 것입니다. 그리고 시리얼 라이저는 페이로드에서'항목 '이 아닌 것을 제거하려고하는 것처럼 보입니다.) 또한 모델과 템플릿을 표시하지 않습니다. 어떤 일이 일어나기를 기대하는 곳, 일어날 것으로 예상되는 일, 대신에 관찰하는 일이 명확하지 않습니다. –

답변

0

ember-data RESTAdapter은 JSON에 모델 이름 및 값에 해당하는 키가 각 모델의 attribute-name - attribute-value-type 정의에 따라 키 - 값 쌍이있는 JSON 객체 배열로 포함될 것으로 기대합니다 *. 당신이 header: attr('string'), body: attr('string')를 포함 entry라는 이름의 모델이 그러한 경우 다음 JSON은 상점에 entry

연결되어야합니다 :

{ 
    "entries": [{ 
     "header": "header test", 
     "body": "body test body test body test", 
     "id": "5a3960253d578doc735798511" 
    }], 
} 

id 필드 이름을 사용자 정의 할 엠버 데이터를 설득 할 수있는 방법이있다 (id 대신 _id 수락). build-in 복수화 규칙은 entry-> entries 복수화를 포함해야합니다 (그러나 나는 그것을 보증 할 수 없습니다).

어쨌든 무시해야 모델 이름에 해당하지 않는 모든 최상위 키, 그래서 (당신이 field 또는 total라는 이름의 모델을 가지고하지 않는 한) 수동으로 필터링 할 필요가 없습니다.

경로 모델 훅에 return this.store.findAll('entry') (또는 query('entry',{/*something*/})을 입력하면 컨트롤러 서식 파일에서 {{#each model as |entry|}}을 볼 수 있습니다. 은 (는 모델 이름으로 model을 사용하지하는 것이 좋습니다,하지만 당신이 entries 될하려는 경우, 당신은 어딘가에 명시 적를 지정 컨트롤러 또는 경로의 setupController 방법, 즉해야합니다.)

* json 응답 (아마도 같은 이름의 API 끝점)에서 최상위 키로 모델의 이름을 반복하는 점은 당신이 윙윙 거리면 다른 모델을 포함 할 수 있으며 저장소에도 추가된다는 것입니다.

+0

도움을 주셔서 감사합니다 arne.b. 나는 이것을 지금 시도 할 것이다! –