0

我正在使用分机 4.1。我在加载带有关联的 json 数据时遇到了一些问题。平面数据完美加载,只有“hasMany”不起作用。(如果加载那里无处可寻)。如果加载了一条记录,我希望能够获得参加者的 2 个商店和文档的 1 个商店。

我还可以将 JSON 格式更改为更好的格式(如果您有建议,请告诉我!)

我有这个 json 数据

这是我的第一个模型:

Ext.define('App.model.package.LabVisit', {
    extend: 'Ext.data.Model',
    requires: [
        'App.model.package.Attendee',
        'App.model.package.Document'
    ],
    idProperty: 'labVisitID',

    fields: [
        {
            mapping: 'lab_visit_id',
            name: 'labVisitID',
            type: 'int'
        },
        {
            mapping: 'lab_id',
            name: 'labID',
            type: 'int'
        },
        ... some more irrelevant...
        {
            mapping: 'comments',
            name: 'comments'
        },
        {
            name: 'upddate'
        }
    ],
    hasMany: [
        /* edit: added foreignKey (also tried with: lab_visit_id) */
        { model: 'package.Attendee', name: 'attendeeLabList', associationKey:'attendee_lab', foreignKey: 'labVisitId' },
        { model: 'package.Attendee', name: 'attendeeEmpList', associationKey:'attendee_emp', foreignKey: 'labVisitId' }
        { model: 'package.Document', name: 'document', associationKey:'document' },
    ]

});

我有以下与会者模型:

Ext.define('App.model.package.Attendee', {
    extend: 'Ext.data.Model',

    fields: [
        /* edit: added this field */
        {
            mapping: 'lab_visit_id',
            name: 'labVisitId'
        },
        {
            mapping: 'attendee_id',
            name: 'AttendeeID'
        },
        {
            mapping: 'first_name',
            name: 'firstName'
        },
        {
            mapping: 'last_name',
            name: 'lastName'
        },
        {
            name: 'email'
        }
    ]
});

以下文档模型:

Ext.define('App.model.package.Document', {
    extend: 'Ext.data.Model',

    fields: [
        {
            mapping: 'document_id',
            name: 'docID'
        },
        {
            mapping: 'document_name',
            name: 'docName'
        },
        {
            mapping: 'document_mimetype',
            name: 'mimeType'
        },
        {
            name: 'uploadID'
        }
    ]
});

最后是我的商店:

Ext.define('App.store.package.LabVisit', {
    extend: 'Ext.data.JsonStore',
    requires: [
        'App.model.package.LabVisit'
    ],

    constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};

        me.callParent([Ext.merge({
            storeId: 'labVisitStore',
            model: 'App.model.package.LabVisit',
            remoteSort: true,
            proxy: {
                type: 'ajax',
                api: {
                    read: API_URLS.getVisitList //url to the json
                },
                reader: {
                    type: 'json',
                    root: 'rows'
                }
            }
        }, cfg)]);
    }
});

编辑: 我在模型中添加了外键并将其添加到hasMany

还是没有区别。这是我的输出:

店里的第一张唱片

我也觉得很奇怪:如果它坏了,我期待一个例外。而且总是有两家神秘的商店,但我不知道为什么或目的是什么。

4

1 回答 1

0

问题出在这部分:

hasMany: [
    { model: 'package.Attendee', name: 'attendeeLabList', associationKey:'attendee_lab' },
    { model: 'package.Attendee', name: 'attendeeEmpList', associationKey:'attendee_emp' },
    { model: 'package.Document', name: 'document', associationKey:'document' },
]

@Izhaki 帮了我很多忙。谢谢!尤其是小提琴。我从那里开始,开始用我的代码一块一块地切换代码。直到我看到模型是问题所在。

模型应该这样定义: App.model.package.Attendee

我认为如果模型未被识别/不存在/未提供,框架不会显示显着错误/警告,这很遗憾......但是,嗯,它现在可以工作了。

于 2012-08-20T09:35:34.813 回答