2017-12-05 7 views
0

엠버 (ember)가있는 스마트 장치 용 앱을 제작하려고합니다. 이미 신기루를 설치하고 데이터라고하는 배열을 선언합니다. 그것은 가정, 사용자 및 장치와 같은 배열을 보유하고 있습니다. 이제는 상점에서 필터링 된 데이터를 얻는 데 어려움을 겪고 있으며 실제로 상점의 동작에 혼란 스럽습니다. 이런 이유로 나는이 Filtering store data in ember와 같은 몇몇 동등한 화제를 이미 읽었다 그러나 이것은 나의 경우에는 작동하지 않는다. 나는 그의 멤버 배열에 사용자 ID를 가지고 모든 가구를보고 싶어 households.index하기 위하여려고하는 경우Ember는 상점/신기루에서 필터링 된 데이터를 가져옵니다.

사실이 내 router.js

Router.map(function() { 
    this.route('about'); 
    this.route('users', function() { 
    }); 
    this.route('households', function() { 
    this.route('index', { path: '/:user_id' }) 
    this.route('rooms',{ path: '/:household_id' }); 
    this.route('devices'); 
    }); 
}); 

입니다. 다음 코드는 내 데이터 구조의 예제를 보여줍니다.

"users": [ 
     { 
      "id":101, 
      "forename":"Peter", 
      "surname":"Peterson", 
      "memberIn":[ 
       501 
      ] 
     }, 
     { 
      "id":102, 
      "forename":"Anna", 
      "surname":"Peterson", 
      "memberIn":[ 
       501 
      ] 
     } 
] 

    "households":[ 
     { 
      "id":501, 
      "name":"Zuhause", 
      "admin":131000, 
      "member":[ 
       101, 
       102 
      ] 
} 

나는이 {{# 링크가-에 "households.index"user.id}}와 household.index 내 노선이

model(params) { 
    //holt alle Haushalte und gibt dann nur die Haushalte weiter, die auch den aktuellen Benutzer als Member haben. 
    return this.get('store').findAll('household').then(results => results.filter((site) => { 
     return site.get('member').filter(x => x == params.user_id).length > 0; 
    })); 
    } 

처럼 보이는 같은 경로 household.index를 호출하고 내 config.js 부분은 다음과 같습니다.

this.get('/households', function(db, request) { 
    return { households: data.households }; 
}); 

잘 작동합니다. 하지만 내 의견으로는 서버가 내가 요청한 데이터를 제공 할 책임이 있습니다. 그래서 내가 원하는 것은 내가 특정한 요청을 보내고 필요한 가정을 얻는 것뿐입니다.

내 시도 : 하는 index.js :

export default Route.extend({ 
    model(params) { 
     return this.get('store').find('household', params.user_id); 
     } 
}); 

구성 JS 부분 :

this.get('/households/:id', function(db, request) { 
     console.log('household get'); 
     console.log(data.households.filter(x => x.member.filter(x => x == request.params.id).length > 0)); 
    return { households: data.households.filter(x => x.member.filter(x => x == request.params.id).length > 0) }; 
}); 

디버그 오류 :

Error while processing route: households.index payload.data is null

이 오류가 발생하는 이유를 이해하지 못할. 로그는 나에게 내가 돌려주고 싶은 배열을 준다.

답변

0

당신이 신기루에 RestSerializer을 사용하고 있는지 확인

을 활용할 수있다 : 그렇지 않으면, 다음을 반환하는 것은 더 가까이 당신을 얻을합니다
// mirage/serializers/application.js 
import { RestSerializer } from 'ember-cli-mirage'; 

export default RestSerializer; 

올바른 형식은 RESTAdapterAPI입니다.

그냥

{ 
    "posts": { 
    "id": 1, 
    "title": "I'm Running to Reform the W3C's Tag", 
    "author": "Yehuda Katz" 
    } 
} 

이상 하나

,

{ 
    "posts": [ 
    { 
     "id": 1, 
     "title": "I'm Running to Reform the W3C's Tag", 
     "author": "Yehuda Katz" 
    }, 
    { 
     "id": 2, 
     "title": "Rails is omakase", 
     "author": "D2H" 
    } 
    ] 
} 
0

기본적으로 Ember Data는 JSONAPISerializer과 함께 제공되며 여기서는 서버 (이 경우 신기루)가 데이터 형식을 지정하는 방식에 대해 몇 가지 사항을 가정합니다. 이 경우 신기루가 반환하는 문서는 일반적으로 JSON API Spec을 준수해야하며 응답의 기본 데이터가있는 최상위 회원 인 data이 있어야합니다.

맞춤 응답 형식을 고수하려면 Ember Data의 JSONSerializer을 확인하십시오.

return { data: db.households.filter(x => x.member.filter(x => x == request.params.id).length > 0) }; 

을하거나, Mirage

함께 제공 자세한 내용은 여기를 참조 JSONAPISerializerEmber Guides | Serializers

+0

당신의 도움 주셔서 감사합니다, 당신은 하나의 응답에 대한

, 아래의 형식으로 데이터를 반환하는 확인합니다. 저는 Restadapter를 사용하고 있다고 말하고 싶습니다. – panx36