Extjs Sencha存储基于ids的多对一关系生成

Extjs Sencha存储基于ids的多对一关系生成,extjs,extjs6,many-to-one,relational,Extjs,Extjs6,Many To One,Relational,在尝试解决多对一关系时,我似乎无法让sencha根据给定的ID自动生成它们 我有两个模型和两个商店(4个文件): 型号客户: Ext.define('Customer', { extend: 'Ext.data.Model', fields: [{ name: 'id', unique: true, }, { name: 'name', }] }); 门店客户: Ext.define('MyApp.store.Cu

在尝试解决多对一关系时,我似乎无法让sencha根据给定的ID自动生成它们

我有两个模型和两个商店(4个文件):

型号
客户

Ext.define('Customer', {
    extend: 'Ext.data.Model',
    fields: [{
        name: 'id',
        unique: true,
    }, {
        name: 'name',
    }]
});
门店客户:

Ext.define('MyApp.store.Customer', {
    extend: 'Ext.data.Store',
    storeId: 'Customer',
    alias: 'store.customer',
    autoLoad: true,

    model: 'Customer',

    data: {
        items: [
            {id: 1, name: 'paul'},
            {id: 3, name: 'W'}
        ]
    },

    proxy: {
        type: 'memory',
        reader: {
            type: 'json',
            rootProperty: 'items'
        }
    }
});
模型票:

Ext.define('Ticket', {
    extend: 'Ext.data.Model',
    fields: [{
        name: 'id',
        unique: true,
    }, {
        name: 'title'
    }, {
        name: 'customerId',
        reference: {
            type: 'Customer',
            inverse: 'tickets',
            getterName: 'getCustomer',
            setterName: 'setCustomer',
        }
    }]
});
最后是票务商店:

Ext.define('MyApp.store.Ticket', {
    extend: 'Ext.data.Store',
    storeId: 'Ticket',
    alias: 'store.ticket',
    autoLoad: true,

    model: 'Ticket',

    data: {
        items: [{id: 1000, title: 'blah', customerId: 1}]
    },

    proxy: {
        type: 'memory',
        reader: {
            type: 'json',
            rootProperty: 'items'
        }
    }

});
现在,这应该是相当简单的:我有一个客户“有”一张票。我之所以将这些存储区分开,而不是定义客户存储区中的所有内容,是因为以后我希望分别加载和处理这两件事情

现在,当我运行此程序并在某个控制器上测试此设置时,我发现了一个惊人的结果:

const thestore = Ext.data.StoreManager.lookup('Customer');
const ticketstore = Ext.data.StoreManager.lookup('Ticket');
debugger;

const customer = thestore.findRecord('id', 1);
const ticket = ticketstore.findRecord('id', 1000);

const t = customer.tickets();
const c = ticket.getCustomer();
const basename = customer.get('name');
const customername = c.get('name');
console.dir(basename);
console.dir(customername);
我注意到“basename”和“customername”是相等的,实际上customername是“blank”:这表示引用根本不起作用。使用调试器确实表明,现在有两个id为“1”的不同模型,票据已经创建了自己的客户(而不是将自己连接到客户)


我如何定义(在返回ticketstore数据时)票证属于客户?

应该在客户模型中使用hasmany配置,类型为票证

hasMany: [
    {
        name: 'Ticket',
        model: 'Ticket'
    },
]
它会自动将票证与客户关联,但客户表中必须有一个外键与票证表关联。我希望这会有帮助