2013-08-02 2 views
2

간단한 모델이 있고 RESTadapter를 사용하여 데이터를 가져옵니다. JSON 요청이 실행되었지만 다음과 같은 오류가 발생합니다. "서버가 0 키를 가진 해시를 반환했지만 매핑이 없습니다."Ember 데이터 : 서버가 키 0으로 해시를 반환했지만 매핑이 없습니다.

이유가 무엇인지 알 수 있습니까?

모델 :

는 요청 articles.json의 JSON 응답

App.Article = DS.Model.extend({ 
    title: DS.attr('string') 
}); 
:

[ 
    { 
    "id": 1, 
    "title": "Title 1" 
    }, 
    { 
    "id": 2, 
    "title": "Title 2" 
    } 
] 

내가 ... 이유는 응답의 형식입니다 생각 난 이미 변경 내 응답은 "기사"를 포함하고, 그러나 동일한 문제를 찌른다.

[ 
    { 
    "article": { 
     "id": 1, 
     "title": "Title 1" 
    } 
    }, 
    { 
    "article": { 
     "id": 2, 
     "title": "Title 2" 
    } 
    } 
] 

JSOn 요청 및 응답을 RESTadapter와 함께 사용하기 위해 포맷하는 방법에 대한 좋은 설명서는 어디에서 찾을 수 있습니까?

답변

4

했다 @kiwiupover 당신이 Ember Docs RESTAdapter에서 문서를

찾을 수 루트 요소

{"articles": [ 
    { 
    "id": 1, 
    "title": "Title 1" 
    }, 
    { 
    "id": 2, 
    "title": "Title 2" 
    } 
    ] 
} 
을해야을 위해 또는 JSONapi project

+0

감사합니다. 루트 요소 "article"을 포함한 후에도 여전히 작동하지 않습니다. 동일한 오류가 발생합니다. 문제는 복수 화일 수 있습니까? 나는 "기사"에 넣어야하는 기사의 목록을 반환합니다. 다른 제안? – cyclomarc

+0

완전히 기사가 기사 일 필요가 있습니다. 제 실수는 대답을 편집 할 것입니다. – kiwiupover

+0

이것은 실제로 올바른 구조입니다. 예상 Ember JSON 구조에 대한 문서를 어디에서 찾을 수 있습니까? 많은 감사합니다. Marc – cyclomarc

2

에서 찾고있는 JSON 98 %의 권리, 그것은해야 여러 레코드를 가진 경우 복수형으로 articles :

{"articles": [ 
    { 
     "id": 1, 
     "title": "Title 1" 
    }, 
    { 
     "id": 2, 
     "title": "Title 2" 
    } 
]} 
+0

실제로 기사를 사용하면 효과가 있습니다. JSON 구조체에 대한 문서를 Ember 데이터와 함께 사용할 수있는 아이디어를 생각해보십시오. 감사합니다 ... – cyclomarc

+0

98 % 감사합니다. 답변을 수정했습니다. 건배 – kiwiupover

1

서버에 액세스 할 수 없다면 매우 쉽습니다. 어댑터를 수정하십시오. 은 "GET"요청의 경우, 어댑터 내에서 findfindAll를 재정의해야합니다 :

App.Store = DS.Store.extend({ 
    adapter: DS.RESTAdapter.create({ 
    find: function(store, type, id) { 
     var root = this.rootForType(type), adapter = this; 

     return this.ajax(this.buildURL(root, id), "GET"). 
     then(function(json){ 
     var updatedJSON = {}; 
     updatedJSON[root] = json; 
     adapter.didFindRecord(store, type, {article: json}, id); 
     }).then(null, DS.rejectionHandler); 
    }, 

    findAll: function(store, type, since) { 
     var root, adapter; 

     root = this.rootForType(type); 
     adapter = this; 

     var resourceName = this.pluralize(root); 

     return this.ajax(this.buildURL(root), "GET",{ 
     data: this.sinceQuery(since) 
     }).then(function(json) { 
     var updatedJSON = {}; 
     updatedJSON[resourceName] = json; 
     adapter.didFindAll(store, type, updatedJSON); 
     }).then(null, DS.rejectionHandler); 
    } 
    }) 
}); 

를 지금이 순간,이 기능은 소스 코드 here in rest_adapter.js에 살고 있습니다.

차이점은 여기서 각 기능에 updatedJSON이 정의되어 있습니다. 서버에서 json을 가져 와서 필요한 올바른 키를 사용하여 새 객체를 만듭니다.

+0

그래서이 방법이 오랫동안 작동하는 예제가 아닌 것처럼 보입니다.이 방법이 ember 데이터 1.0에서 어떻게 작동하는지 보여 주시겠습니까? –

+0

솔직히 말해서, 나는 물건이 얼마나 빨리 바뀌고 일하는 것을 깨뜨린 것을 깨달았을 때 Ember와 함께 일하는 것을 그만 두었습니다. – efatsi

관련 문제