Ich versuche, eine App für Smarthome-Geräte mit Glut zu bauen. Ich habe Mirage bereits installiert und deklariere ein Array, das Daten heißt. Es enthält Arrays wie Haushalte, Benutzer und Geräte. Jetzt bin ich mit gefilterten Daten aus dem Laden stecken und ich bin wirklich verwirrt durch das Verhalten des Ladens. Aus diesem Grund lese ich schon einige gleiche Themen wie diese Filtering store data in ember, aber das funktioniert nicht in meinem Fall.Ember gefilterte Daten aus dem Laden/Mirage
Eigentlich ist das meine 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');
});
});
Wenn ich households.index werde ich alle Haushalte sehen wollen, die den Benutzer-ID in seinem Element-Array. Der folgende Codeausschnitt zeigt ein Beispiel für meine Datenstruktur.
"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
]
}
Ich rufe die Strecke household.index wie diese {{# link-to "households.index" user.id}} und meine Route in household.index sieht wie folgt aus
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;
}));
}
Und meine config.js Teil bei mirage wie folgt:
this.get('/households', function(db, request) {
return { households: data.households };
});
Dies funktioniert gut! Aber meiner Meinung nach ist der Server dafür verantwortlich, mir die Daten zu geben, nach denen ich suche. Alles, was ich will, ist, dass ich eine spezifische Anfrage sende und nur die Haushalte bekomme, die ich brauche.
Mein Versuch: index.js:
export default Route.extend({
model(params) {
return this.get('store').find('household', params.user_id);
}
});
Config js Teil:
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) };
});
Debug Fehler:
Error while processing route: households.index payload.data is null
Ich kann nicht verstehen, warum dieser Fehler auftritt. Das Protokoll gibt mir das Array, das ich zurückgeben möchte.
Dank für Ihre Hilfe danken. Ich vergesse zu sagen, dass ich den Restadapter benutze. – panx36