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 提出了一个问题,要求提供一种可靠的方法来返回记录中的实际关联,但我也提出了一个临时解决方案来确定它们是否真的是一个关联。我已经将这个想法扩展到可能对您的类型有帮助的东西?但是你必须测试一下以确定它是否真的适合你......我在我的代码中只使用 hasOnehasMany,所以我不知道这是否适合 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';
    }
});