K2 Smartforms(v4.7):解决子表单打开时定时器刷新加载层覆盖问题
解决K2 SmartForms v4.7定时器刷新时加载遮罩覆盖子表单的问题
我刚好在K2 SmartForms v4.7里处理过类似的场景,给你几个实用的解决方案,按需选择:
方案一:通过规则判断子表单状态,条件触发刷新
这个思路是从根源避免冲突——在定时器触发时先检查子表单是否打开,只有在子表单未打开的情况下才执行列表刷新:
- 打开基础表单的规则编辑器,找到定时器的
Timer Tick触发事件 - 在执行「刷新列表视图」的动作前,添加一个条件判断:
- 选择子表单/子视图的状态属性(v4.7里一般是
IsOpen或者Visible,具体看你子表单的配置) - 设置条件为「该属性等于False」(即子表单未打开)
- 选择子表单/子视图的状态属性(v4.7里一般是
- 只有当条件满足时,才执行刷新列表的动作;如果子表单已打开,就跳过刷新逻辑(也可以加个轻量提示告知用户当前无法刷新)
方案二:自定义CSS调整加载面板层级
如果不想修改刷新逻辑,也可以通过调整加载遮罩的层级,让它显示在子表单下方:
- 打开基础表单的样式设置,找到「自定义CSS」的输入区域
- 用浏览器开发者工具(F12)查看K2默认加载遮罩的类名,一般是
k2-loading-overlay或者k2-loader-container - 添加以下CSS代码(根据实际类名调整,
!important是为了覆盖默认样式):
.k2-loading-overlay { z-index: 900 !important; }
- 注意:先确认子表单的默认z-index(一般子表单弹窗的层级在1000以上),把加载遮罩的z-index设为比它小的数值,就能让子表单稳稳显示在遮罩上方
方案三:子表单开关时自动启停定时器
你提到的「子表单打开时停止定时器」是个靠谱的方案,还可以优化成自动恢复,不用手动操作:
- 给子表单的
On Open事件添加规则:执行「Stop Timer」动作,选中你的刷新定时器 - 给子表单的
On Close事件添加规则:执行「Start Timer」动作,重启定时器 - 这样既不会在子表单打开时触发刷新造成遮罩干扰,关闭后又能自动恢复列表的定时刷新
内容的提问来源于stack exchange,提问作者Chris Romp
相关产品推荐
相关产品推荐

