【发布时间】:2015-04-29 10:03:42
【问题描述】:
我正在尝试在 ember 数据中使用嵌入式记录,但我认为我缺少一些基本的东西。
我有两个模型
app/models/video.js:
export default DS.Model.extend({
title: DS.attr('string'),
transcriptions: DS.hasMany('transcription', { embedded: 'always' })
});
app/models/transcription.js:
export default DS.Model.extend({
video: DS.belongsTo('video')
});
我还有一个自定义序列化程序 app/serializers/video.js:
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs:{
transcriptions: { embedded: 'always' }
},
extractSingle: function (store, type, payload, id) {
var data = payload.data;
return {
id: data._id,
title: data.Title,
transcriptions: [{ id: "1" }]
}
}
});
我希望这会导致我的视频模型被填充为转录对象数组,但我得到了以下错误:
"处理路由时出错:videos.show" "断言失败:Ember 数据需要一个数字或字符串来表示
transcriptions关系反而找到了一个对象。如果这是一个 多态关系请指定一个type键。如果这是一个 嵌入关系请包括DS.EmbeddedRecordsMixin和 在序列化程序的 attrs 中指定transcriptions属性 对象。”
任何关于我在这里做错的建议将不胜感激。
更新:解决方案是将我的自定义序列化程序修改为以下内容:
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs:{
transcriptions: { embedded: 'always' }
},
extractSingle: function (store, type, payload, id) {
var data = payload.data;
var videoPayload = {
id: data._id,
title: data.Title,
transcriptions: [{ id: "1" }]
};
return this._super(store, type, videoPayload, id);
}
}
【问题讨论】:
-
对 - 完全错过了 - 抱歉,我读得太快了,只专注于错误。EmbeddedRecordsMixin - 当然这是一个完整的记录..
-
是的,我已经剥离了一堆东西来尝试专注于事业。一旦我找出导致错误的原因,转录模型将具有其他属性等
标签: ember.js ember-data ember-cli