【问题标题】:ember-data embedded objects without idember-data 没有 id 的嵌入对象
【发布时间】:2016-10-05 10:40:18
【问题描述】:

我似乎无法找到一种方法来对 ember-data 中没有 id 的嵌入对象使用模型This answer Jehuda Katz 关于如何处理嵌入对象的内容接近我正在寻找的内容,尽管我不断得到

断言失败:您必须在传递给“push”的对象中包含一个“id”用于记录

这似乎是阅读EmbeddedRecordsMixin documentation 时的预期行为,其中指出:

没有id 属性的记录不被视为嵌入记录,模型实例必须具有id 属性才能与Ember Data 一起使用。

从 REST-API 收到的 JSON 如下所示:

{
  'line': {
    _id: 5,
    name: "my line",
    opts: {...},
    dataset: [
      {x: 1473167369522, y: 5},
      {x: 1473167469522, y: 6},
      {x: 1473167569522, y: 7}
    ]
  }
}

app/models/line.js

export default DS.Model.extend({
  name: DS.attr('string'),
  opts: DS.attr(),
  dataset: DS.hasMany('point')
});

app/models/point.js

export default DS.Model.extend({
  x: DS.attr('custom'),
  y: DS.attr('')
});

app/serializers/line.js

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    dataset: { embedded: 'always'}
  }
});

我应该如何解决这个问题?
我已经考虑过只创建包含嵌套对象数组DS.attr() 的属性并完全放弃嵌套模型,但这也行不通,因为我需要对嵌入对象的属性之一进行一些自定义(反)序列化

相关(尽管 Ember API 已经发生了相当大的变化):
- How to access nested object in json with Ember data
- Ember data and mongodb state?

【问题讨论】:

  • 您是否考虑过只在您的序列化程序中生成一个唯一的 id?当您不修改这些应该可以很好地工作的模型时。可能您不希望相同的 x/y 对两次,因此只需将它们与分隔符连接起来就可以了。
  • 顺便说一句,使用 ember 数据获取图表数据可能是一场艰苦的战斗。我们考虑这样做,除了痛苦什么也没遇到。 Tom Dale 表示他们只是使用简单的 ember.objects 和 fetch() 来获取天窗discuss.emberjs.com/t/time-series-data-in-ember-data/6945/2
  • 感谢@DavidDuncan 的分享,目前我将按照@Lux 的建议在每个点上添加一个id,但我很想听听 ember+timeseries 数据的经验...
  • @MikiDi 我们使用时间序列,在我们的应用程序中Point 不是模型,因为我们的案例不需要它并且由于性能原因。正如您评论的那样,我们将属性 dataset 设置为 attr()

标签: ember.js ember-data


【解决方案1】:

你可以使用ember-data-model-fragments插件:https://github.com/lytics/ember-data-model-fragments

【讨论】:

  • 具有ember模型的所有功能吗?
猜你喜欢
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 2013-03-29
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
相关资源
最近更新 更多