Sencha 键控多对一关系,具有复杂的(命名空间)名称

Sencha keyed many to one relation, with complex (namespace) name

煎茶上的official documentation有一个简单的多对一关系的例子。它使用 "reference" 字段来标识关系。

下面是一个稍微修改过的例子,这个有效:

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”class 来进一步修改它以使用命名空间(按照 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();

但是现在突然不再生成 classes 并且有一个数组 customers.tickets 未定义(并且 ticket.getCustomer 也未定义)。

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

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

关于命名空间的使用,我找到了解决方案,the getterName property of the reference field helps. Together with the complementory inverseTicket class 的定义将变为:

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

虽然我无法找到有关自动命名的信息("it's based on the role and mostly add -s" 除外),但能够手动命名生成的方法回避了这个问题。