2017-12-05 5 views
0

店/蜃気楼からフィルタリングされたデータを取得します。私はすでにミラージュをインストールし、データと呼ばれる配列を宣言しています。それは世帯、ユーザー、およびデバイスのような配列を保持します。今私は店からフィルタリングされたデータを取得して立ち往生していると私は本当に店の動作によって混乱している。このような理由から私はすでにFiltering store data in emberのようないくつかの同等のトピックを読んでいますが、これは私の場合はうまくいきません。私は彼のメンバーアレイ内のユーザーIDを持つすべての世帯を見たいhouseholds.indexするつもりならばエンバーは、私が残り火とsmarthomeデバイス用のアプリを構築しようとしています

は、実はこれが私の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を呼び出していますし、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; 
    })); 
    } 

のように見えますそして、私の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

このエラーが発生した理由を私は理解して傾けます。ログは私に返したい配列を与えます。 JSONAPISerializerこれでデフォルトエンバーデータの船で

答えて

0

あなたは蜃気楼でRestSerializerを使用していることを確認し、

を参照してください JSONAPISerializerを活用でき
// 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

は、(この場合は蜃気楼で)サーバーがデータを書式設定されている方法についていくつかのことを前提としています。この場合、蜃気楼が返す文書は、一般にJSON API Specに準拠し、応答の一次データが存在するトップレベルのメンバーdataを持つと予想されます。

カスタムフォーマットされた回答に固執する探している場合は、エンバーデータのJSONSerializerチェックアウトすることができます。それ以外の場合は、以下を返すことは近いあなたを取得する必要があります:

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

またはあなたがMirage

に付属してよりここEmber Guides | Serializers

+0

はあなたの助けをありがとう、あなたは、単一の応答のための

、以下の形式でデータを返すされていることを確認。私はRestadapterを使っていると言います。 – panx36

関連する問題