lowcode-engine
lowcode-engine copied to clipboard
选项卡组件的标签项配置使用变量输入,会导致标签项配置消失
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.将选项框组件拖入画布
2.将标签项配置切换到变量输入
3.点击此输入框
4.出现标签项配置消失的bug
没有消失,只是因为绑定的变量没有数据,导致缩在一个角落了。
@eternalsky 不是啊大佬,我说的不是中间画布上渲染的标签项没了,是右边的配置面板里的那项配置消失了
哦,才明白过来,你是说配置项消失了,我看一下
@eternalsky 我看了一下,主要原因是 Tab 组件自定义了 getValue 和 setValue,这个的返回值导致设置的变量有问题,无法设置变量。
通过 getValue 获取到的返回值一直是 [],导致 ExpressionSetter 执行出现问题,这块需要物料进行处理。
@liujuping 我自己 debug 了一下这个问题,发现转 expressionSetter 时会触发 setValue,此时入参 value 的值为 undefined,有什么可靠的方法能判断目前进入 expressionSetter 了吗,感觉通过 undefined 判断不太可靠。
引擎没有方法判断是否进入了 expressionSetter,这里的实现建议是:
1.在变成 expressionSetter 时,value 的值应该为
{
type: 'JSExpression',
value: undefined
}
2.lowcode-engine-ext 这里的处理方式和其他地方变量的处理方式不一致,这里变成了一个单独的输入框,如果是弹窗的形式感觉更一致一些。
输入框:
弹窗:
我看 ext 里面是单独将 ArraySetter、ObjectSetter 的变量部分进行了处理,处理原因可能还得去问一下 @hzd822
@liujuping 目前关键就是 1 没有生效,如果值为
{ type: 'JSExpression', value: undefined,
}
的话,其实也可以根据 type 来进行判断。这个要 @hzd822 来看一下吗
嗯嗯,需要 @hzd822 来看一下。
之前单独处理是因为arraysetter个objectsetter绑定变量的时候是整体绑定,因为如果嵌套子项都可以绑定变量会有很多bug,所以暂时采用这种方式
这个是 @liujuping 提到的第二个问题,我觉得单独处理的问题也是不大的,目前主要的问题是第一个问题。导致即使想在 getValue,setValue 中做判断,也没有判断的依据。
@eternalsky 这里的 setter 之间切换会重置成 undefined。@alilc/[email protected] 这个版本目前解决了报错的问题。在 undefined 下返回 [] 或者 undefined 都没有问题了。
现在还存在的问题是,“当设置成表达式之后,刷新没有回显”,这个需要物料的 getValue 函数处理一下。类似这样。
如果还是期望在切换成表达式 setter 的时候,能区分 undefined 是不是 JSExpression。需要 @hzd822 在这里加一下 ExpressionSetter 相关的逻辑,目前只处理了 VariableSetter,所以导致切换时候 ExpressionSetter 的值为 undefined。
@liujuping 今天又尝试修复这个问题,发现还是无解,一旦切 setter 后,value 就被重置回undefined,即使这个 undefined 不处理,在切换的时候不报错,但是切回来的时候由于值又是 undefined,导致之前用户配置的信息全部都丢掉了。
@liujuping 如何能做到类似 UIPaaS 那样,切换绑定变量,但是不影响展示的值呢。