Extjs 6.5 - 查找关联类型(hasOne、hasMany、belongsTo 等)
Extjs 6.5 - finding an association type (hasOne, hasMany, belongsTo, etc)
我将我的应用程序从 Sencha Touch 2.4 升级到 ExtJs 6.5.3。
在 Sencha Touch 2.4 上,有一个名为 getType() 的关联函数 (Ext.data.association.Association),returns 关联类型为字符串,例如:“hasOne ".
例如,in here (the Model source code of 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';
}
});
我将我的应用程序从 Sencha Touch 2.4 升级到 ExtJs 6.5.3。
在 Sencha Touch 2.4 上,有一个名为 getType() 的关联函数 (Ext.data.association.Association),returns 关联类型为字符串,例如:“hasOne ".
例如,in here (the Model source code of 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';
}
});