1

我将我的应用程序从 Sencha Touch 2.4 升级到了 ExtJs 6.5.3。

在 Sencha Touch 2.4 上,有一个名为 getType() 的关联函数 (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还是belongto,我可以“选择”创建什么类型的SQL查询(最初不是我写的,但这是一个大项目,我无法联系原始开发人员) ,所以这对我来说是必须的。

我尝试查看 Extjs 6 / 6.5 文档,但找不到任何东西。好像很久以前就被弃用了。

我正在考虑在模型中插入“类型”作为模型和类型的对象,例如:

{ 
  'MyProject.model.Receipt': 'hasone',
  'MyProject.model.Order': 'hasmany',
  'MyProject.model.invoice': 'belongsto',
  ...
}

然后尝试从模型本身访问它并通过关联“父”模型找到类型。

对于这样一项(假设是)简单的任务,这感觉像是一种风险和矫枉过正。

我也尝试在网上寻找解决方案,但似乎没有人试图为类似的事情找到解决方案。

谢谢

4

1 回答 1

2

记录中的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';
    }
});
于 2020-08-12T23:06:49.323 回答