Extjs Sencha存储基于ids的多对一关系生成
在尝试解决多对一关系时,我似乎无法让sencha根据给定的ID自动生成它们 我有两个模型和两个商店(4个文件): 型号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
客户
:
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'
},
]
它会自动将票证与客户关联,但客户表中必须有一个外键与票证表关联。我希望这会有帮助