0

sencha的官方文档有一个多对一关系的简单示例。它使用“参考”字段来识别关系。

下面是一个稍作修改的示例,它有效:

Ext.define('Customer', {
    extend: 'Ext.data.Model',
    fields: ['id', 'name']
});

Ext.define('Ticket', {
    extend: 'Ext.data.Model',
    fields: ['id', 'title', {
        name: 'customerId',
        reference: 'Customer'
    }]
});
const customer = new Customer({id: '1', name: 'paul'});
const ticket = new Ticket({id: '1000', title: 'blah', customerId: '1'});
const t = customer.tickets();
const c = ticket.getCustomer();
console.dir(t);
console.dir(c);

现在我尝试进一步修改它,通过重命名“ Customer”类以使用命名空间(按照 sencha 中的约定):

Ext.define('Long.Name.Customer', {
    extend: 'Ext.data.Model',
    fields: ['id', 'name']
});

Ext.define('Ticket', {
    extend: 'Ext.data.Model',
    fields: ['id', 'title', {
        name: 'customerId',
        reference: 'Long.Name.Customer'
    }]
});
const customer = new Long.Name.Customer({id: '1', name: 'paul'});
const ticket = new Ticket({id: '1000', title: 'blah', customerId: '1'});
const t = customer.tickets();
const c = ticket.getCustomer();

但是现在突然不再生成类,并且有一个未定义的数组customers.ticketsticket.getCustomer也未定义)。

如何使用具有多对一关系的命名空间?

此外:生成方法的规则是什么?-- 我注意到 Customer.tickets()使用复数(添加-s到函数名称):以“s”结尾的单词会发生什么?这些生成的方法是否有“规则”?

4

1 回答 1

0

对于命名空间的使用,我找到了一个解决方案,引用字段的 getterName属性会有所帮助。再加上互补。该类的定义Ticket将变为:

Ext.define('Ticket', {
    extend: 'Ext.data.Model',
    fields: ['id', 'title', {
        name: 'customerId',
        reference: {
            type: 'Look.Out.Customer',
            inverse: 'tickets',
            getterName: 'getCustomer',
            setterName: 'setCustomer',
        }
    }]
});

虽然我无法找到有关自动命名的信息(除了“它基于角色并且主要添加 -s”),但能够手动命名生成的方法可以回避这个问题。

于 2018-07-31T15:27:18.000 回答