【发布时间】:2016-06-21 14:54:15
【问题描述】:
可能我误解了 Ember 如何延迟加载 hasMany 关系的双方,但我会指定我想要的内容,有人可以告诉我这是否可能以及如何配置。
我正在使用RESTAdapter,并且我有一个与其他几个对象具有一对多关系的父对象。当我查看父对象时,我有想要显示为子插座的子对象的链接。
示例可能是:
// 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 的链接时,我需要获取该品牌的区域,URL 将是/api/brands/1/regions。
如果我在一个大结果中返回所有数据,一切正常,我的regions 路由器看起来像这样:
export default Ember.Route.extend({
model() {
return this.modelFor('brand').get('regions');
}
});
但我不知道该怎么做才能从我的 API 中懒惰地正确获取区域。或者,如果它甚至是可能的。我阅读了side loading,目前,我的 API 不会只返回儿童的 ID。
【问题讨论】:
-
一种方法是将查询参数添加到链接到:
{{#link-to "brand.regions" (query-params brand=model)}},然后在区域-Route中查询该品牌。 the docs for query-params -
如果您在模板中被激活的任何位置使用
regions属性,则 Ember 将自动加载该关系的记录。您能否向我们展示您实际显示区域的模板? -
@GJK - 我明天上班时可以,但这有点道理。我可以告诉你,我没有通过
{{brand.regions}}获取它们,也许如果我以这种方式访问它们,它会以不同的方式查询。我会尝试类似的方法并报告。
标签: ember.js ember-data