lowcode-engine icon indicating copy to clipboard operation
lowcode-engine copied to clipboard

选项卡组件的标签项配置使用变量输入,会导致标签项配置消失

Open zzuer opened this issue 1 year ago • 1 comments

Describe the bug (required) / 详细描述 bug(必填)

选项卡组件的标签项配置使用变量输入,会导致标签项配置消失


To Reproduce (required) / 如何复现 bug?(必填,非常重要)

Steps to reproduce the behavior: / 详细复现步骤:

---1.打开官方demo ---2.选择组件库中的选项卡组件并拖入画布中 ---3.点击右侧标签项配置的切换设置器到变量输入 ---4.点击请输入表达式的输入框即可复现bug

Expected behavior (required) / 预期行为(必填,非常重要)

标签项配置不应该消失


Screenshots (optional) / bug 截图(可选)

1.将选项框组件拖入画布 image

2.将标签项配置切换到变量输入 image

3.点击此输入框 image

4.出现标签项配置消失的bug image


zzuer avatar Mar 14 '23 09:03 zzuer

没有消失,只是因为绑定的变量没有数据,导致缩在一个角落了。

eternalsky avatar Mar 16 '23 11:03 eternalsky

@eternalsky 不是啊大佬,我说的不是中间画布上渲染的标签项没了,是右边的配置面板里的那项配置消失了

zzuer avatar Mar 17 '23 01:03 zzuer

哦,才明白过来,你是说配置项消失了,我看一下

eternalsky avatar Mar 28 '23 07:03 eternalsky

@eternalsky 我看了一下,主要原因是 Tab 组件自定义了 getValue 和 setValue,这个的返回值导致设置的变量有问题,无法设置变量。

image

通过 getValue 获取到的返回值一直是 [],导致 ExpressionSetter 执行出现问题,这块需要物料进行处理。

liujuping avatar Apr 04 '23 09:04 liujuping

@liujuping 我自己 debug 了一下这个问题,发现转 expressionSetter 时会触发 setValue,此时入参 value 的值为 undefined,有什么可靠的方法能判断目前进入 expressionSetter 了吗,感觉通过 undefined 判断不太可靠。

eternalsky avatar Apr 27 '23 11:04 eternalsky

引擎没有方法判断是否进入了 expressionSetter,这里的实现建议是:

1.在变成 expressionSetter 时,value 的值应该为

{
  type: 'JSExpression',
  value: undefined
}

2.lowcode-engine-ext 这里的处理方式和其他地方变量的处理方式不一致,这里变成了一个单独的输入框,如果是弹窗的形式感觉更一致一些。

输入框: image

弹窗: image

我看 ext 里面是单独将 ArraySetter、ObjectSetter 的变量部分进行了处理,处理原因可能还得去问一下 @hzd822

image

liujuping avatar May 06 '23 02:05 liujuping

@liujuping 目前关键就是 1 没有生效,如果值为

{ type: 'JSExpression', value: undefined,

}

的话,其实也可以根据 type 来进行判断。这个要 @hzd822 来看一下吗

eternalsky avatar May 06 '23 02:05 eternalsky

嗯嗯,需要 @hzd822 来看一下。

liujuping avatar May 06 '23 02:05 liujuping

之前单独处理是因为arraysetter个objectsetter绑定变量的时候是整体绑定,因为如果嵌套子项都可以绑定变量会有很多bug,所以暂时采用这种方式

hzd822 avatar May 09 '23 02:05 hzd822

这个是 @liujuping 提到的第二个问题,我觉得单独处理的问题也是不大的,目前主要的问题是第一个问题。导致即使想在 getValue,setValue 中做判断,也没有判断的依据。

eternalsky avatar May 09 '23 07:05 eternalsky

@eternalsky 这里的 setter 之间切换会重置成 undefined。@alilc/[email protected] 这个版本目前解决了报错的问题。在 undefined 下返回 [] 或者 undefined 都没有问题了。

现在还存在的问题是,“当设置成表达式之后,刷新没有回显”,这个需要物料的 getValue 函数处理一下。类似这样。

image

如果还是期望在切换成表达式 setter 的时候,能区分 undefined 是不是 JSExpression。需要 @hzd822 在这里加一下 ExpressionSetter 相关的逻辑,目前只处理了 VariableSetter,所以导致切换时候 ExpressionSetter 的值为 undefined。

image

liujuping avatar May 11 '23 08:05 liujuping

@liujuping 今天又尝试修复这个问题,发现还是无解,一旦切 setter 后,value 就被重置回undefined,即使这个 undefined 不处理,在切换的时候不报错,但是切回来的时候由于值又是 undefined,导致之前用户配置的信息全部都丢掉了。

eternalsky avatar Sep 27 '23 11:09 eternalsky

@liujuping 如何能做到类似 UIPaaS 那样,切换绑定变量,但是不影响展示的值呢。

eternalsky avatar Sep 28 '23 01:09 eternalsky