序列化模型时Ember数据“modelFor”错误

时间:2015-06-18 08:24:37

标签: ember.js ember-data ember-cli

我正在使用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'},
    }
});

有人知道我做错了吗?

感谢。

1 个答案:

答案 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。

相关问题