我正在使用ember 1.13,ember-cli和ember数据1.19.1,我遇到了一个由于非特定而难以追踪的错误。执行以下操作时会发生错误:
this.get('model').forEach(function(mymodel) {
applications.push(elavonApplication.serialize({includeId: true}));
});
其中“elavonApplication”是名为“elavon-application”的DS.Model的实例,错误的片段是:
Uncaught TypeError: Cannot read property 'modelFor' of undefined
ember$data$lib$system$model$$default.reopenClass.typeForRelationship @
ext.js:171ember$data$lib$system$model$$default.reopenClass._findInverseFor @
ext.js:214ember$data$lib$system$model$$default.reopenClass.inverseFor @
ext.js:205Ember.Mixin.create.removeEmbeddedForeignKey @ embedded-records-mixin.js:317
Ember.Mixin.create.serializeBelongsTo @ embedded-records-mixin.js:199
elavon-application继承自名为iso-application的父DS.Model。模型如下:
// models/iso_application.js
import DS from 'ember-data';
export default DS.Model.extend({
status: DS.belongsTo('iso-application-status'),
statusId: DS.attr('number'),
quickQuote: DS.belongsTo('quick-quote'),
quickQuoteId: DS.attr('number'),
acquirer: DS.belongsTo('acquirer'),
acquirerId: DS.attr('number'),
cardPresentStatus: DS.belongsTo('iso-application-status'),
cardPresentStatusId: DS.attr('number'),
ecommStatus: DS.belongsTo('iso-application-status'),
ecommStatusId: DS.attr('number'),
});
// models/elavon-application.js
import DS from 'ember-data';
import IsoApplication from 'paya-operations/models/iso-application';
export default IsoApplication.extend({
principal: DS.belongsTo('iso-elavon-principal'),
businessInfo: DS.belongsTo('iso-elavon-business-info'),
});
iso-application模型有几个关系,包括一个名为“status”的关系,它链接到下面的“iso-application-status”DS.Model:
// models/iso-application-status.js
import DS from 'ember-data';
export default DS.Model.extend({
isoApplications: DS.hasMany('iso-application', {inverse: 'status'}),
description: DS.attr('string'),
colour: DS.attr('string')
});
只有存在关系时才会出现错误。在输入断点并在代码运行时逐步执行代码后,我发现在ext.js中的“typeForRelationship”函数中,当Ember抛出错误时,“store”参数在发生错误时为空。当我介入时,它为我在模型中的每个关系提供,然后当它达到“状态”关系时,它变为空。我不知道为什么会这样,但它与提供给模型的数据无关,因为数据库中存在所有状态ID。
我使用ActiveModelSerializer和EmbeddedRecordsMixin来访问我的服务器后端。我没有iso-application-status模型或iso-application模型的序列化器。 iso-application的所有属性都是由elavon-application模型继承的,所以我有一个序列化器代替:
// serializers/elavon-application.js
import DS from "ember-data";
export default DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
status: {embedded: 'always'},
quickQuote: {embedded: 'always'},
acquirer: {embedded: 'always'},
principal: {embedded: 'always'},
businessInfo: {embedded: 'always'},
}
});
有人知道我做错了吗?
感谢。
答案 0 :(得分:0)
我已经设法通过重新安装ember-cli和ember-data来解决问题。我认为最近升级过程中出现了一些问题,当时我从版本1.12.0升级到1.13.0并且将ember-data 1.0.0-beta.17.0升级到1.0.0-beta.19.1。