我可能误解了Ember如何懒惰地加载hasMany
关系,但我会指定我想要的东西,有人可以告诉我它是否可能以及如何配置。< / p>
我使用RESTAdapter
并且我有一个与多个其他对象具有1对多关系的父对象。当我查看父级时,我有子对象的链接,我想将其显示为子出口。
示例可能是:
// brand.js
export default Model.extend({
name: attr('string'),
description: attr('string'),
dateCreated: attr('date'),
lastUpdated: attr('date'),
regions: hasMany('region', {async: true})
});
// region.js
export default Model.extend({
name: attr('string'),
dateCreated: attr('date'),
lastUpdated: attr('date'),
brand: belongsTo()
});
当我访问/api/brands/1
时,我将返回以下JSON:
{
"brand": {
"id": 1,
"dateCreated": 1466456255539,
"lastUpdated": 1466456255936,
"name": "Some Brand",
"description": "Voluptates odio nemo corrupti",
}
}
我的路线定义如下:
this.route('brand', {path: '/brands/:brand_id'}, function() {
this.route('regions');
});
因此,在brand
详细信息屏幕中,我有{{outlet}}
,当我点击regions
的链接时,我需要获取该品牌的区域和网址将是/api/brands/1/regions
。
如果我在一个大结果中返回所有数据,那么一切正常,我的regions
路由器看起来像这样:
export default Ember.Route.extend({
model() {
return this.modelFor('brand').get('regions');
}
});
但是我不知道该怎么做才能从我的API中正确地获取区域。或者,如果它是可能的。我在side loading
上阅读,目前,我的API不会仅为儿童返回ID。
答案 0 :(得分:1)
以您的示例为例,ember.js不知道要加载哪些区域。您的JSON必须是(非嵌入式):
{
"brand": {
"id": 1,
"dateCreated": 1466456255539,
"lastUpdated": 1466456255936,
"name": "Some Brand",
"description": "Voluptates odio nemo corrupti",
"regions": ["5", "9"]
}
}
然后加载id为5和9的区域。或者你可以直接嵌入它们:
{
"brand": {
"id": 1,
"dateCreated": 1466456255539,
"lastUpdated": 1466456255936,
"name": "Some Brand",
"description": "Voluptates odio nemo corrupti",
"regions": [{
"id": "5",
"name": "Hanover",
"dateCreated": "2016-09-25 18:39:18",
"lastUpdated": "2016-09-25 18:39:18",
},{
"id": "9",
"name": "Cologne",
"dateCreated": "2016-01-19 11:59:18",
"lastUpdated": "2016-02-22 12:09:58",
}]
}
}
后者见here。