Ember 序列化模型时数据 "modelFor" 错误
Ember Data "modelFor" error when serializing models
我正在使用 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 应用程序继承自名为 iso 应用程序的父 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 应用程序模型有几个关系,包括一个称为 "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" 参数为空时发生错误。当我逐步完成时,它为我在模型中拥有的每个关系提供了它,然后当它达到 "status" 关系时,它变为空。我不知道这是为什么,但这与提供给模型的数据无关,因为所有状态 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'},
}
});
有谁知道我做错了什么吗?
谢谢。
我已经通过重新安装 ember-cli 和 ember-data 解决了这个问题。我假设最近在升级过程中出现了问题,当我从版本 1.12.0 到 1.13.0 和 ember-data 1.0.0-beta.17.0 到 1.0.0-beta.19.1.
我正在使用 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 应用程序继承自名为 iso 应用程序的父 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 应用程序模型有几个关系,包括一个称为 "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" 参数为空时发生错误。当我逐步完成时,它为我在模型中拥有的每个关系提供了它,然后当它达到 "status" 关系时,它变为空。我不知道这是为什么,但这与提供给模型的数据无关,因为所有状态 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'},
}
});
有谁知道我做错了什么吗?
谢谢。
我已经通过重新安装 ember-cli 和 ember-data 解决了这个问题。我假设最近在升级过程中出现了问题,当我从版本 1.12.0 到 1.13.0 和 ember-data 1.0.0-beta.17.0 到 1.0.0-beta.19.1.