重复字段组
对象数组需要用普通字段填写,而不是整段编辑 JSON 时,可以使用重复字段组。工作流路由、收件人、请求头、工具参数和审批步骤都是常见场景。
绑定行模板
Schema 决定数组和对象结构。一个 repeater 节点绑定数组,它的子字段绑定到 items 下面。
编译器生成 routes.*.match 这样的路径模板,Renderer 在具体行解析为 routes.1.match。嵌套重复组每深入一层就增加一个索引。宿主错误和字段异步校验都使用实际路径。
选择行标识协议
默认使用运行时标识。它可以在本地插入、编辑、移动和删除时保留字段状态,又不会改变受控值。
如果外部状态仓库会整体替换行对象,宿主可以提供 hostAdapter.identifyRepeaterItem,从已有业务数据中推导 key。回调不能修改对象;标识重复、缺失或不合法时会回退到运行时 key。
UiNode.itemKey 是可选项。只有 item Schema 把对应属性声明为必填字符串时,编译器才会接受它。新行会生成该值,因为文档已经明确把标识纳入业务值协议。不要为了引擎内部需要给工作流配置增加 rowId。
运行时行为
- 添加、删除、上移和下移都会回传完整受控值。
- 到达
minItems或maxItems边界时,相应操作会禁用。 - 只读状态覆盖行字段、排序、添加、删除和表单操作。
- 校验摘要会聚焦到准确的嵌套输入框。
- 嵌入容器变窄时,行内网格自动变为单列。
- 基础类型数组继续使用紧凑的重复项控件。
把规则与数据源绑定到当前行
需要逐项运行的 computed、validate、visible 或 enabled 规则必须设置 scope: "row"。文档中的路径保留模板形式:
行表达式可以读取全局路径、当前行或嵌套结构中的外层行。错误与轨迹使用实际路径,计算失败和增量缓存限制在当前实际行内。
数据源依赖使用相同模板。对于 routes.*.provider,第三行请求会在 request.scope.dependencies 中同时带上模板和 routes.2.provider。宿主按实际路径读取受控值,不需要保存行元数据。
Playground 的 Router 表单是工作流节点参考示例。它的 routes 值仍是普通 { when, route }[],同时具备行校验和宿主管理的逐行选项。
当前边界
直接字段需要紧凑比较时可使用数据表格。共用选项的矩阵题使用独立的 matrix-single 或 matrix-multiple 字段。弹窗编辑、批量表格操作和大数组虚拟滚动仍属于后续工作。