2013-11-27 2 views
16

관련 데이터에 대한 요청을 어떻게 페이지 매 깁니까? 예를 들어, 내 사람작업 모델이 첨부 된 경우, RESTful 사고에서 다음과 같은 작업을 수행하면 모두 얻을 수 있습니다.엠버 데이터 관계를 페이지 매기기하는 방법

var tasks = person.get('tasks'); 

너무 많은 데이터입니다. 배후에서 작동하는 요청에 일부 쿼리 매개 변수를 적용하려면 어떻게해야합니까? 끝점에 첨부 된 것과 같은 것을 가진 끝점에 이상적입니다. 여기

?&offset=3&limit=3

내가 IndexController에 달성하기 위해 노력하고있어 설명하는 fiddle이다. 나는 엠버 데이터를 사용하여 페이지 넘김 요청을하는 것이 "엠버 방식"이라고 생각하지 않습니다.

+2

이것에 대한 좋은 해결책을 찾아 냈습니까? – RyanJM

답변

-2

Ember.js guides on using models에서 find() 호출과 함께 쿼리를 제출할 수도 있습니다. 가이드에서

this.store.find('person', { name: "Peter" }).then(function(people) { 
    console.log("Found " + people.get('length') + " people named Peter."); 
}); 

:

당신이 엠버 데이터에 불투명 find()에 전달 검색 옵션의 해시. 기본적으로 이러한 옵션은 서버 HTTP GET 요청으로 전송됩니다.

이 기능을 사용하려면 서버가 쿼리 응답을 해석하는 방법을 알고 있어야합니다.

+0

응답 해 주셔서 감사합니다. 그래, 그걸 읽었 어. 문제는 나의 관계 종점이 나의 페이로드의'links' 부분에 포함되어 있다는 것입니다. 만약 내가 모든'Tasks'를 원한다면 나는 위의 방법을 사용 하겠지만 특정 사람의 작업을 쿼리하고자한다면 나의 endpoint는 다르다'people/$ id/tasks' – David

+0

구조의 유형이 'Person'은'tasks : hasMany ('task')'관계를 가져야 만합니다. 그러면'person.get ('tasks')'를 사용하여 특정 사람의 작업에 액세스 할 수 있습니까? – CraigTeegarden

+0

그럴 수도 있지만 작업 내 애플 리케이션에서 다형성 있습니다. 그들은 사람들이나 회사에 속할 수 있습니다. – David

10

이 질문에 첫번째 질문을 받았다 때 존재하지 않았지만, 적어도 RESTAdapterJSONAPIAdapter를 들어,이 할 수있는 것 같다 ember-data-has-many-query라는 부가 기능은 이제있다. 퍼버 네이션 (pagination)을 아직 지원하지 않는 에버 데이터 (ember-data)로 인해 몇 가지 단점이있는 것으로 보인다. 이로 인해 항상 불안한 경우가 있지만 항상 store.query이 있습니다. 그러나이 경우 API에서 끝점에 필터 매개 변수를 (예를 들어) 지원해야합니다. hasMany의 관계를 가져올 때 지원 검색어 매개 변수

  • json-api issue #509는 :

    관련 :

    (가 관련이 질문처럼 보이지 않는를 underspecified된다 JSON API,하지만 관련이 있습니다)

  • 5

    현재로서는 아직 이 없습니다. 기본 엠버에서 페이지 매김을 처리하는 방법.

    먼저 우리는 더 간단한 것, findAll 요청의 페이지 매김을 살펴보아야합니다.

    .query({page:3}) 같은 것을 함께 할,하지만 리드 몇 가지 문제로 할 수 있습니다

    1. 이 고전 매김을위한 좋은 해결책이지만위한 무한 스크롤 당신은 수동으로 결과를 병합해야합니다.
    2. 결과는 캐시되지 않으므로 페이지가 매겨진 목록에서 앞뒤로 움직이면 많은 쿼리가 발생합니다. 때로는 목록이 편집 가능하지만 종종 편집 할 수있는 경우에는 필요합니다.

    두 번째 문제점에 대해 저는 addon called ember-query-cache을 빌드하여 저장소에 연결하고 쿼리 결과를 캐시 할 수 있습니다. 매우 짧은 데모는 here입니다.

    이제 우리는 솔직히 당신이 엠버 데이터 자체에서 더 나은 지원을 할 때까지 최상위 .query를 사용하는 것이 좋습니다의 관계에 대해 이야기하는 경우 :

    store.query('task', { person: get(person, 'id'), page: 3 } 
    

    나쁜 그것에 대해 아무것도 없다. 당신은 당신의 결과를 얻고 다른 방향의 관계를가집니다. 캐싱이 필요하지 않는 한 ember 데이터에 해킹을하지 않아도 작동합니다. 캐싱이 필요한 경우 애드온에서 수행 한 해킹이 거의 필요하지 않습니다.

    우리는 여전히 ember-data가 완전히 JSONAPI가되기를 희망합니다. 따라서 페이지 매김이 필요합니다. 나는 폼을 API 관점으로 생각하면 가장 좋은 점은 관계에 의해 리턴 된 ManyArray의 다음 페이지와 이전 페이지를 요청할 수있는 능력이 있어야한다는 것이다. JSONAPI와 함께 다음 링크와 이전 링크가 제공됩니다. 그러나 이제는 많은 프로젝트에서 성공적으로 사용한 최상위 수준 인 .query을 크게 개선하지 않으면 서 ember 데이터를 심층적으로 분석해야합니다.

    관련 문제