1

我们正在开发一个图表应用程序,出于性能原因,它需要一种方法来将图表数据从一些元数据中分离出来,以呈现可供选择的图表。

Ember-data(当前为 v2.5.0)似乎不支持 JSONAPI 的稀疏字段集。可以?

可能还有其他选项,例如使用关系,但我们现在最直观的设计是打破规范并在集合中查询图表时使用不同的端点:

GET ../charts/

{"data": [{
  "type": "charts",
  "id": "1",
  "attributes": {
    "type": "A",
    "precision": "10",
    "average": "22.2",
    "minimum": "20.4",
    "maximum": "25.3",
  },
  {
  "type": "charts",
  "id": "2",
  "attributes": {
    "type": "A",
    "precision": "100",
    "average": "20.0",
    "minimum": "10.0",
    "maximum": "30.0",
  },
  ...
]}

并在通过 ID 查询时正确:

GET ../charts/1

{"data": {
  "type": "charts",
  "id": "1",
  "attributes": {
    "type": "A",
    "precision": "10",
    "average": "22.2",
    "minimum": "20.4",
    "maximum": "25.3",
    "history": [
      ["100","21.0"],
      ["200","20.4"],
      ["300","25.3"],
      ...
    ]
  }
}

但是我们还没有找到一种方法来强制 EmberData 从组件中重新加载来自后端服务的数据。我们想使用 backgroundReload 功能,因为我们相信它会提供最好的视觉效果,但是所有关于它的文档都是使用来自 Route 的模型钩子完成的。

我在正确的轨道上还是有人解决了这个问题?

对未来的 Google 员工的注意事项——这不是使用实际的 JSONapi Sparse Fieldsetsfields[chart]=history而只是依赖于打破 JSONapi 规范并为每个端点返回不同的属性。

4

1 回答 1

0

您可以将store服务注入组件并在挂钩上强制查找该模型:

import Ember from 'ember';

export default Ember.Component.extend({
  store: Ember.inject.service(),

  didReceiveAttrs() {
    this._super(...arguments);
    this.get('store').findRecord('chart', this.get('chart').id);
  },
});

编辑:请注意,这仍然存在 ember-data 级别的缓存问题,因为您可能会遇到部分属性可能存在或不存在的情况。

编辑:将钩子切换到didReceiveAttrs

于 2016-04-14T04:25:54.697 回答