我正在尝试使用ember为智能家居设备构建应用。我已经安装了海市蜃楼,并声明了一个名为data的数组。它拥有家庭,用户和设备等阵列。现在我不知道从商店获取过滤数据,我真的很困惑商店的行为。出于这个原因,我已经阅读了一些相同的主题,例如Filtering store data in 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');
});
});
如果我要去households.index,我想看到所有在他的成员数组中拥有user-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
]
}
我正在调用此类{{#link-to“households.index”user.id}}这样的路线来处理home.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);
}
});
config js part:
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) };
});
调试错误:
处理路径时出错:households.index payload.data为null
我无法理解为什么会出现这种错误。日志给了我想要返回的数组。
答案 0 :(得分:0)
默认情况下,Ember Data附带JSONAPISerializer
,这假设您的服务器(在本例中为海市蜃楼)格式化数据的方式。在这种情况下,海市蜃楼返回的文档通常符合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
答案 1 :(得分: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"
}
]
}