diff --git a/packages/core/client/src/schema-component/antd/form-item/hooks/useLazyLoadAssociationFieldOfForm.ts b/packages/core/client/src/schema-component/antd/form-item/hooks/useLazyLoadAssociationFieldOfForm.ts index 263348145..a607889ed 100644 --- a/packages/core/client/src/schema-component/antd/form-item/hooks/useLazyLoadAssociationFieldOfForm.ts +++ b/packages/core/client/src/schema-component/antd/form-item/hooks/useLazyLoadAssociationFieldOfForm.ts @@ -56,6 +56,15 @@ const useLazyLoadAssociationFieldOfForm = () => { variables .parseVariable(variableString, recordVariable) .then((value) => { + // fix https://nocobase.height.app/T-2288 + // 造成这个问题的原因有以下几点: + // 1. 编辑表单自身会请求数据,并在请求数据时,会在 appends 参数中加上所有的关系字段路径(包括子表单中的); + // 2. 而 `变量预加载中` 也会请求对应关系字段的数据,但是请求的数据是不包含子表单中的关系字段的; + // 3. 所以,当 `变量预加载` 的请求晚于编辑表单的请求时,就会造成这个问题; + // 更优的解决方案是:在 `变量预加载` 中也加上子表单中的关系字段路径,并删除编辑表单请求数据的逻辑(因为没必要了)。 + // 但是这样改动较大,可以等之后 e2e 测试较完备后再处理。 + if (field.value) return; + field.value = transformVariableValue(value, { targetCollectionField: collectionField }); }) .catch((err) => {