Sencha用复杂的(命名空间)名称将多对一关系设为关键

时间:2018-07-31 11:33:06

标签: extjs many-to-one auto-generate extjs6-modern

sencha上的official documentation有一个简单的多对一关系示例。它使用“引用”字段来识别关系。

下面是一个稍作修改的示例,它起作用:

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.tickets(也未定义ticket.getCustomer)。

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

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

1 个答案:

答案 0 :(得分:0)

对于命名空间的使用,我找到了一个解决方案,引用字段的the getterName属性很有帮助。以及补语inverseTicket类的定义将变为:

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

虽然我无法找到有关自动命名的信息(“基于角色并且大多添加-s”除外),但是能够手动命名生成的方法可以避免此问题。