我将我的应用程序从Sencha Touch 2.4升级到ExtJs 6.5.3。
在Sencha Touch 2.4上,有一个名为getType((的Association(Ext.data.Association.Association(函数,它以字符串形式返回关联类型,例如:;hasOne";。
例如,在这里(Sencha Touch 2.4的模型源代码(:
for (i = 0; i < associationCount; i++) {
association = associations[i];
associationName = association.getName();
type = association.getType();
allow = true;
if (associationType) {
allow = type == associationType;
}
if (allow && type.toLowerCase() == 'hasmany') {
在我的项目中,通过理解关联类型是hasmany、hasone还是belongsto,我可以"选择";创建什么类型的SQL查询(不是我最初写的,但这是一个大项目,我无法联系最初的开发人员(,所以这对我来说是必须的。
我试图查看Extjs 6/6.5文档,但没有找到任何内容。它似乎很久以前就被弃用了。
我正在考虑插入";类型";在模型内部作为模型和类型的对象,例如:
{
'MyProject.model.Receipt': 'hasone',
'MyProject.model.Order': 'hasmany',
'MyProject.model.invoice': 'belongsto',
...
}
然后尝试从模型本身访问它并通过关联找到类型";"父";模型
对于这样一项(假设是(简单的任务来说,这感觉像是一种风险和过度消耗。
我也试着在网上寻找解决方案,但似乎从来没有人试图找到这样的解决方案。
谢谢
作为开发人员,记录上的associations
属性有点棘手,对我们来说有点模糊。如果在关联中使用inverse
属性,它们有时会出现在associations
属性中,这是有问题的。我向Sencha Support提出了一个问题,要求提供一种可靠的方法来返回记录中的实际关联,但我也提出了一种临时解决方案来确定它们是否真的是一个关联。我把这个想法扩展到了可能对你的类型有帮助的东西上?但你必须测试一下,以确定它是否真的适合你。。。我在代码中只使用了hasOne
和hasMany
,所以我不知道这是否适用于belongsTo
。
这是Fiddle,这是代码:
Ext.override(Ext.data.Model, {
isActualAssociation: function (role) {
var isThing = !role.instanceName || role.fromSingle;
if (!isThing) {
console.log('found weirdo', role)
}
return isThing;
},
getAssociationType: function (association) {
if (association.fromSingle) {
return 'hasOne';
}
else if (association.storeName) {
return 'hasMany';
}
return 'belongsTo';
}
});