Ember Data 2.0+中的稀疏字段集或从组件重新加载

时间:2016-04-14 04:22:06

标签: ember.js ember-data ember-2.0.0

我们正在开发一个图表应用程序,出于性能原因,需要一种方法将图表数据从某些元数据拆分为渲染图表以供选择。

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规范并为每个端点返回不同的属性。

1 个答案:

答案 0 :(得分: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);
  },
});

编辑:请注意,这仍然存在来自余烬数据级别的缓存问题,因为您可能遇到可能存在或不存在部分属性的情况。

编辑:将钩子切换到didReceiveAttrs