Extjs 6.5 -查找关联类型(hasOne、hasMany、belongsTo等)

2lpgd968  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(253)

我将我的应用程序从 Sencha Touch 2.4升级到ExtJs 6.5.3。
在 Sencha Touch 2.4上,有一个名为getType()的关联函数(Ext.data.association.Association),它将关联类型作为字符串返回,例如:“有一个”。
例如可以看到,in here (the Model source code of Sencha Touch 2.4):

  1. for (i = 0; i < associationCount; i++) {
  2. association = associations[i];
  3. associationName = association.getName();
  4. type = association.getType();
  5. allow = true;
  6. if (associationType) {
  7. allow = type == associationType;
  8. }
  9. if (allow && type.toLowerCase() == 'hasmany') {

在我的项目中,通过了解关联类型是hasmany、hasone还是belongsto,我可以“选择”要创建什么类型的SQL查询(最初不是我写的,但那是一个大项目,我无法联系最初的开发人员),所以这对我来说是必须的。
我试着查看Extjs 6 / 6.5的文档,但是什么都找不到。看起来它很久以前就被弃用了。
我考虑在模型中插入“类型”作为模型和类型的对象,例如:

  1. {
  2. 'MyProject.model.Receipt': 'hasone',
  3. 'MyProject.model.Order': 'hasmany',
  4. 'MyProject.model.invoice': 'belongsto',
  5. ...
  6. }

然后尝试从模型本身访问它,并通过关联“父”模型找到类型。
对于这样一个(本应是)简单的任务来说,这感觉像是一种风险和矫枉过正。
我也试着在网上寻找解决方案,但看起来从来没有人试图为这样的事情找到解决方案。
谢谢你

xoefb8l8

xoefb8l81#

作为开发人员,记录上的associations属性有点棘手,而且对我们来说有点模糊。如果在关联中使用inverse属性,它们有时会出现在associations属性中,这是有问题的。我已经向 Sencha 支持部门提出了一个问题,要求提供一个可靠的方法来返回记录上的实际关联。但是我也提出了一个临时的解决方案来确定它们是否真的是一个关联。我已经将这个想法扩展到可能对您的类型有所帮助的东西。但是您必须测试它来确定它是否真的对您有效...我在代码中只使用hasOnehasMany,所以我不知道这是否适用于belongsTo
这是Fiddle,这是代码:

  1. Ext.override(Ext.data.Model, {
  2. isActualAssociation: function (role) {
  3. var isThing = !role.instanceName || role.fromSingle;
  4. if (!isThing) {
  5. console.log('found weirdo', role)
  6. }
  7. return isThing;
  8. },
  9. getAssociationType: function (association) {
  10. if (association.fromSingle) {
  11. return 'hasOne';
  12. }
  13. else if (association.storeName) {
  14. return 'hasMany';
  15. }
  16. return 'belongsTo';
  17. }
  18. });
展开查看全部

相关问题