Javascript 在Ext存储中加载JSON,缺少关联

Javascript 在Ext存储中加载JSON,缺少关联,javascript,json,extjs,extjs4.1,Javascript,Json,Extjs,Extjs4.1,我正在使用ext4.1。我在加载带有关联的json数据时遇到一些问题。平面数据可以完美加载,只有“hasMany”不起作用。(如果装载,则无处可寻)。如果加载了记录,我希望能够获得与会者的2个存储和文档的1个存储 我还可以将JSON格式更改为更好的格式(如果您有建议,请告诉我!) 我有 这是我的第一个模型: Ext.define('App.model.package.LabVisit', { extend: 'Ext.data.Model', requires: [

我正在使用ext4.1。我在加载带有关联的json数据时遇到一些问题。平面数据可以完美加载,只有“hasMany”不起作用。(如果装载,则无处可寻)。如果加载了记录,我希望能够获得与会者的2个存储和文档的1个存储

我还可以将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

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


我也觉得很奇怪:如果它坏了,我希望会有例外。有两个神秘的商店总是存在,但我不知道为什么或目的是什么。

问题在于这一部分:

hasMany: [
    { model: 'package.Attendee', name: 'attendeeLabList', associationKey:'attendee_lab' },
    { model: 'package.Attendee', name: 'attendeeEmpList', associationKey:'attendee_emp' },
    { model: 'package.Document', name: 'document', associationKey:'document' },
]
@伊扎基帮了我很多。塔克斯!尤其是小提琴。我从那里开始,用我的代码一块一块地切换代码。直到我看到模型才是问题所在

模型的定义如下:
App.model.package.Attendee


如果模型未被识别/未被激活/未提供,框架未显示重大错误/警告,我认为这是令人遗憾的。。。但是,嗯,它现在起作用了。

我相信,和其他许多人一样,您是ExtJS4中令人困惑的关联的受害者。代码的一个明显问题是,
包.Attendee
模型没有链接到
包.LabVisit
的(外键)。如果查看,
产品
具有
用户id
字段以完成与用户具有的多个关联。换句话说,您的关联模型无效,无论加载情况如何都无法工作。@Izhaki我相信我是。。。这就是我从一开始就在努力解决的问题。所以你说它(只)在我添加
belongsTo
并将
labVisit\u id
添加到
包中时起作用。Attendee
模型…不,你不需要
belongsTo
,你只需要
labVisit\u id
包中。Attendee
模型。但这就提出了一个问题,即一名与会者是否只能参加一次labVisit——在我看来,这里有一个人员列表,而你正试图将他们与labVisit联系起来。所以多对多可能是一种方法,但它不是ExtJS的一部分,尽管可以使用关联存储轻松实现。@Izhaki理论上你是对的,但这是从后端开始的,我只想要一个包含childstores的存储。多对多是过分的。但是我无法理解ExtJS4.x中的关联内容。我还尝试使用转换器返回子存储。这不是最好的解决方案,但我真的需要让它工作起来。只是为了让我得到纠正——事实证明,你不必定义用户id;我已经创建了一些docs代码,它运行得很好。