alibaba / alibaba/lowcode-engine
ExpressionSetter 替换为 VariableSetter 的所有 bug 汇总
Aperta
@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,它的展现面积小,可扩展性低。

它仅仅作为 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)

(这里有个 gif)

参考信息引擎内部版本 bug,表现应该跟 3 一致:
- ArraySetter 会 setValue 导致覆盖 VariableSetter > PluginVariableBindDialog 的值,导致无法设置 Schema 成功
通过注释发现,每个 item 上都会 createSettingFieldView,返回的 SettingFieldView 内部的 onChange 会被触发,导致覆盖之前的设置。- 通过注释 ArraySetter 上的 item 代码绕过1,可以发现 Schema 设置后无法正确回显状态,再次打开浮层也拿不到之前的绑定值。
引擎的field.isUseVariable()判定有误,ArraySetter + VariableSetter 会将 mock 值设置为之前的值,getValue 时得到 mock 值从而判定异常。- ObjectSetter 的值能绑定到 Schema,能正确回显,但触发 blur 后再次 focus,绑定值回退到之前的状态。
这个问题类似 1,createSettingFieldView 导致的覆盖。只是 ObjectSetter 的更新频次没有 ArraySetter 那么勤,所以表现得跟 1 不一样。
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Valutazione
Questa issue non è ancora stata valutata.