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 inverse。 Ticket
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" 除外),但能够手动命名生成的方法回避了这个问题。
煎茶上的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 inverse。 Ticket
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" 除外),但能够手动命名生成的方法回避了这个问题。