Ember 从 store/mirage 获取过滤后的数据
Ember get filtered data from the store/mirage
我正在尝试使用 ember 为智能家居设备构建应用程序。我已经安装了 mirage 并声明了一个名为 data 的数组。它包含家庭、用户和设备等数组。现在我坚持从商店获取过滤数据,我真的对商店的行为感到困惑。出于这个原因,我已经阅读了一些类似的主题 但这对我来说不起作用。
其实这是我的 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');
});
});
如果我要 households.index 我想查看在他的 member 数组中有用户 ID 的所有家庭。以下代码片段显示了我的数据结构的示例。
"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
]
}
我正在这样调用路线 household.index {{#link-to "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;
}));
}
我在海市蜃楼的 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
我不明白为什么会出现这个错误。日志给了我想要 return 的数组。
默认情况下 Ember 数据随 JSONAPISerializer
一起提供,这假设了一些关于您的服务器(在本例中为 mirage)格式化数据的方式。在这种情况下,预计 Mirage 返回的文档通常符合 JSON API Spec 并具有响应的主要数据所在的顶级成员 data
。
如果您希望坚持使用自定义格式的回复,您可能需要查看 Ember 数据的 JSONSerializer。否则,返回以下内容会让你更接近:
return { data: db.households.filter(x => x.member.filter(x => x == request.params.id).length > 0) };
或者您可以利用 Mirage
附带的 JSONAPISerializer
在这里查看更多内容Ember Guides | Serializers
确保您在 mirage 中使用 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"
}
]
}
我正在尝试使用 ember 为智能家居设备构建应用程序。我已经安装了 mirage 并声明了一个名为 data 的数组。它包含家庭、用户和设备等数组。现在我坚持从商店获取过滤数据,我真的对商店的行为感到困惑。出于这个原因,我已经阅读了一些类似的主题
其实这是我的 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');
});
});
如果我要 households.index 我想查看在他的 member 数组中有用户 ID 的所有家庭。以下代码片段显示了我的数据结构的示例。
"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
]
}
我正在这样调用路线 household.index {{#link-to "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;
}));
}
我在海市蜃楼的 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
我不明白为什么会出现这个错误。日志给了我想要 return 的数组。
默认情况下 Ember 数据随 JSONAPISerializer
一起提供,这假设了一些关于您的服务器(在本例中为 mirage)格式化数据的方式。在这种情况下,预计 Mirage 返回的文档通常符合 JSON API Spec 并具有响应的主要数据所在的顶级成员 data
。
如果您希望坚持使用自定义格式的回复,您可能需要查看 Ember 数据的 JSONSerializer。否则,返回以下内容会让你更接近:
return { data: db.households.filter(x => x.member.filter(x => x == request.params.id).length > 0) };
或者您可以利用 Mirage
附带的JSONAPISerializer
在这里查看更多内容Ember Guides | Serializers
确保您在 mirage 中使用 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"
}
]
}