alibaba / alibaba/lowcode-engine

ExpressionSetter 替换为 VariableSetter 的所有 bug 汇总

Aperta
#811 4 commenti 0 reazioni 2 assegnatari Vedi su GitHub

@alvarto ci sta già lavorando.

Dal 12/7/2022.

discussion enhancement
Lingua principale
TypeScript
Stelle
15.9k
Fork
2.7k
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

当前 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 无法正确回显

这里有个 gif
Jul-13-2022 11-42-35

这里有个 gif
Jul-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 不一样。

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.