【发布时间】: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