Ember.js 如何让Ember延迟(异步)加载有很多

Ember.js 如何让Ember延迟(异步)加载有很多,ember.js,ember-data,Ember.js,Ember Data,可能我误解了Ember是如何延迟加载的有很多方面的关系,但我会指定我想要什么,有人可以告诉我是否可能以及如何配置 我使用的是RESTAdapter,我有一个与其他几个对象具有1对多关系的父对象。查看父对象时,我具有要显示为子对象的子对象的链接 例如: // brand.js export default Model.extend({ name: attr('string'), description: attr('string'), dateCreated: attr('date')

可能我误解了Ember是如何延迟加载的
有很多方面的关系,但我会指定我想要什么,有人可以告诉我是否可能以及如何配置

我使用的是
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');
});
因此,在
品牌
详细信息屏幕中,我有一个
{{outlet}
,当我点击
地区
的链接时,我需要获取该品牌的地区,URL将是
/api/brands/1/地区

如果我在一个大结果中返回所有数据,则一切正常,我的
区域
路由器如下所示:

export default Ember.Route.extend({
  model() {
    return this.modelFor('brand').get('regions');
  }
});

但我不知道该怎么做才能使区域从我的API中正确地惰性地获取。或者如果可能的话。我阅读了侧面加载的
内容,目前,我的API不会只返回孩子的ID。

以您的示例为例,ember.js不知道要加载哪些区域。您的JSON必须是(非嵌入式):

然后加载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",
    }]
  }
}

请参阅后一种方法。

一种方法是添加要链接到的查询参数:
{{{#链接到“brand.regions”(查询参数brand=model)}
,然后在region-
Route
中查询该品牌。如果在激活的模板中的任何位置使用
区域
属性,则Ember将自动加载该关系的记录。你能给我们看看你实际显示区域的模板吗?@GJK-我明天上班的时候可以,但这有点道理。我可以告诉你,我不是通过
{{brand.regions}}
获取它们的,如果我通过这种方式访问它们,它可能会以不同的方式进行查询。我会试着做些类似的事情,然后再向你汇报。这正是我所害怕的。我希望Ember能够推断出正确的URL,因为
regions'
parent<代码>/brands/1/regions
这就是API当前的工作方式。这是有问题的,因为目前,当列表被拉出来时,我必须嵌入所有的子项(或者当我在细节视图上时,我想知道如何让它再次查找品牌)。我的印象是REST适配器也可以处理通过URL获取的许多关系。似乎同意,但我对余烬数据已经不太熟悉了。
{
  "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",
    }]
  }
}