如何让 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