我正在尝试在ember数据中使用嵌入式记录,我想我缺少一些基本的东西。
我有两个型号
应用程序/模型/了Video.js:
export default DS.Model.extend({
title: DS.attr('string'),
transcriptions: DS.hasMany('transcription', { embedded: 'always' })
});
应用程序/模型/ 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);
}
}
答案 0 :(得分:1)
问题在于你自己重新实现extractSingle
。
如果你这样做,你应该致电this.super
。
在REST序列化程序的extractSingle
中,它调用normalize
函数 - 这个normalise
函数是EmbeddedRecordsMixin完成所有工作的地方。
由于您没有拨打this.super
或手动拨打this.normalize
,因此您错过了mixin正在做的事情。