如何让 Ember 延迟(异步)加载 hasMany
How to get Ember to Lazy (async) Load hasMany
可能我误解了 Ember 如何延迟加载关系的 hasMany
方面,但我会指定我想要什么,有人可以告诉我是否可行以及如何配置.
我正在使用 RESTAdapter
并且我有一个与其他几个对象具有一对多关系的父对象。当我查看父项时,我有 link 个子对象,我想将其显示为子出口。
示例可能是:
// 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
时,我正在 return 访问以下内容 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
的 link 时,我需要获取区域该品牌,URL 将是 /api/brands/1/regions
。
如果我 return 所有数据都在一个大结果中,一切正常,我的 regions
路由器看起来像这样:
export default Ember.Route.extend({
model() {
return this.modelFor('brand').get('regions');
}
});
但我不知道该怎么做才能从我的 API 中正确地延迟获取区域。或者如果有可能的话。我阅读了 side loading
,目前,我的 API 不会 return ID 仅供儿童使用。
对于您的示例,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。
可能我误解了 Ember 如何延迟加载关系的 hasMany
方面,但我会指定我想要什么,有人可以告诉我是否可行以及如何配置.
我正在使用 RESTAdapter
并且我有一个与其他几个对象具有一对多关系的父对象。当我查看父项时,我有 link 个子对象,我想将其显示为子出口。
示例可能是:
// 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
时,我正在 return 访问以下内容 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
的 link 时,我需要获取区域该品牌,URL 将是 /api/brands/1/regions
。
如果我 return 所有数据都在一个大结果中,一切正常,我的 regions
路由器看起来像这样:
export default Ember.Route.extend({
model() {
return this.modelFor('brand').get('regions');
}
});
但我不知道该怎么做才能从我的 API 中正确地延迟获取区域。或者如果有可能的话。我阅读了 side loading
,目前,我的 API 不会 return ID 仅供儿童使用。
对于您的示例,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。