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

ExpressionSetter 替换为 VariableSetter 的所有 bug 汇总

Open alvarto opened this issue 2 years ago • 4 comments

当前 ExpressionSetter 有很多遗留问题,相比 VariableSetter,它的展现面积小,可扩展性低。

image

它仅仅作为 MixedSetter 内包含 ArraySetter 和 ObjectSetter 时的一个 fallback 使用。这部分适配逻辑见 MixedSetter:

  const hasComplexSetter = formattedSetters.filter((item) =>
    ['ArraySetter', 'ObjectSetter'].includes(item.setter),
  ).length;
  return formattedSetters.map((item) => {
    if (item.setter === 'VariableSetter' && hasComplexSetter) {
      item.setter = 'ExpressionSetter';
      item.name = 'ExpressionSetter';
    }
    return item;
  });

如果解决了下述问题,ExpressionSetter 即可完全替换为 VariableSetter

ObjectSetter / ArraySetter 能绑定 PluginVariableBindDialog 的值,但 blur 后重新 focus 无法正确回显

这里有个 gifJul-13-2022 11-42-35

这里有个 gifJul-13-2022 11-43-17

参考信息引擎内部版本 bug,表现应该跟 3 一致:

  1. ArraySetter 会 setValue 导致覆盖 VariableSetter > PluginVariableBindDialog 的值,导致无法设置 Schema 成功 通过注释发现,每个 item 上都会 createSettingFieldView,返回的 SettingFieldView 内部的 onChange 会被触发,导致覆盖之前的设置。
  2. 通过注释 ArraySetter 上的 item 代码绕过1,可以发现 Schema 设置后无法正确回显状态,再次打开浮层也拿不到之前的绑定值。 引擎的 field.isUseVariable() 判定有误,ArraySetter + VariableSetter 会将 mock 值设置为之前的值,getValue 时得到 mock 值从而判定异常。
  3. ObjectSetter 的值能绑定到 Schema,能正确回显,但触发 blur 后再次 focus,绑定值回退到之前的状态。 这个问题类似 1,createSettingFieldView 导致的覆盖。只是 ObjectSetter 的更新频次没有 ArraySetter 那么勤,所以表现得跟 1 不一样。

alvarto avatar Jul 12 '22 11:07 alvarto

当VariableSetter和ArraySetter或者ObjectSetter一起使用时,会被强制转换成ExpressionSetter。想了解下为啥这么设计,有什么坑吗?变量比较好用,变量和ObjectSetter、ArraySetter一起使用的场景还蛮多的。对应地址:https://github.com/alibaba/lowcode-engine-ext/blame/main/src/setter/mixed-setter/index.tsx#L134

zhaoruilinda avatar Nov 21 '22 04:11 zhaoruilinda

@zhaoruilinda

主要还是兼容性问题哈,这块应该转化为 VariableSetter 的,毕竟打开一个浮层,引用 monaco-editor 的可扩展性是最高的。但是现在有些切换和组合逻辑有 bug

alvarto avatar Nov 21 '22 06:11 alvarto

这块目前直接使用VariableSetter会涉及很多子功能、嵌套的变量 不可用的问题,如果要修改的话,需要花一些时间重构下代码,所以目前暂时用ExpressionSetter来保证初级的功能可用

hzd822 avatar Nov 21 '22 10:11 hzd822

@hzd822 这一块功能应该还是很常见的,想问下这里大概什么时间点能支持呢

wendell0316 avatar Dec 06 '22 11:12 wendell0316