起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4069|回复: 3

[分享] 两个数据组件为主从关系,但从表的FFID不是主表的FID处理方

[复制链接]

851

主题

2560

帖子

5714

积分

论坛元老

Rank: 8Rank: 8

积分
5714
QQ
发表于 2020-4-27 08:52:29 | 显示全部楼层 |阅读模式
关于两个数据组件为主从关系时,但从表的masterID不是主表的FID时的处理方法。
从事X5开发这么多年,深感X5的数据组件设计之完美!开发过程中碰到的99%的技术问题,都能通过数据组件完美的解决。但唯独只有那么1%,一直是心里的一个结,也可能是一个技术死磕侠的强迫症吧。
数据组件提供了主从关系的绑定,从表指定主表,使其中的一列等于主表的ID列。如果是新增,此列的值会自动设置为主表的ID,如果是查询,也可以根据这个绑定的关系进行查询,更合理的地方是,只要从表查询过一次后,数据就会被缓存起来。当主表的行发生改变后,从表中的数据如果加载过一次,就不需要再查数据库了。这样的操作很舒服,根本感觉不到一点点的卡顿。
但问题来了,主表数据是通过视图查出来的,ID列不是从表要绑定的列,之前的做法一直是主表行改变后,设置过滤条件,实时查询数据库,如果用户不断在两条主表数据上点来点去。就要不断的去查询数据库。这种做法即可以满足需求,也不会影响用户的使用。但对于有强迫症的我,就是一个心结。
所有问题,只要突破了,就不再是问题,所有的坎只要迈过去,就变成了门。技术也是一样,就是一层窗户纸,捅破了,也就不再神密。
解决思路:
  • 数据组件有一个能力,【增量刷新】就是不清除原有数据,把查出来的结果增加到原结果下面,但这个参数的默认值是:false;refreshData({append:true}) ;如此就可以增量刷新了;
  • 主表时增加两个计算关系,保存从表是否被查询过一次的状态及查询到的条数(条数在从数据组件的刷新后事件中,通过getTotal方法获取)。如果从表的查询里存在聚合列,需要在主表里增加一些计算关系,用来保存查询时获取的聚合结果。如果希望更完美一点的话,需要在主表里加入从表的limit和offset,用来应对从表的翻页。
  • 第二条中的假设主题,有一个前提条件,从表的limit属性为一个有限值,如果limit是-1的话,获取对就当前主表数据的从表的行数,就需要换一个思路了。通过detailData.count(function(obj){return obj.row.val("fMaindID")==masterID})方法获取。如果看不懂此方法,查询API手册。
  • 为grid展示组件增加过滤条件,过滤出 $row.val("fMaindID")==masterID 的数据。
至此,主要解决思路分析完毕。请高手加以指正。

(此方法仅限于技术死磕侠参考)
如果是新手,看不明白也没关系,就在主数据的indexChanged事件里查询也是一样的。


企业应用定制开发。X5开发者。
手机:15065117236
QQ:87356667
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-19 22:18 , Processed in 0.063255 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表