docs/docs/cn/flow-engine/add-sub-model.md
用于在指定的 FlowModel 中添加子模型(subModel)。支持异步加载、分组、子菜单、自定义模型继承规则等多种配置方式。
interface AddSubModelButtonProps {
model: FlowModel;
subModelKey: string;
subModelType?: 'object' | 'array';
items?: SubModelItemsType;
subModelBaseClass?: string | ModelConstructor;
subModelBaseClasses?: Array<string | ModelConstructor>;
afterSubModelInit?: (subModel: FlowModel) => Promise<void>;
afterSubModelAdd?: (subModel: FlowModel) => Promise<void>;
afterSubModelRemove?: (subModel: FlowModel) => Promise<void>;
children?: React.ReactNode;
keepDropdownOpen?: boolean;
}
| 参数 | 类型 | 说明 |
|---|---|---|
model | FlowModel | 必填。要添加子模型的目标模型。 |
subModelKey | string | 必填。子模型在 model.subModels 中的键名。 |
subModelType | 'object' | 'array' | 子模型的数据结构类型,默认为 'array'。 |
items | SubModelItem[] | (ctx) => SubModelItem[] | Promise<...> | 菜单项定义,支持静态或异步生成。 |
subModelBaseClass | string | ModelConstructor | 指定一个基类,列出继承该类的所有模型作为菜单项。 |
subModelBaseClasses | (string | ModelConstructor)[] | 指定多个基类,自动按组列出继承模型。 |
afterSubModelInit | (subModel) => Promise<void> | 子模型初始化后回调。 |
afterSubModelAdd | (subModel) => Promise<void> | 子模型添加后回调。 |
afterSubModelRemove | (subModel) => Promise<void> | 子模型移除后回调。 |
children | React.ReactNode | 按钮内容,可自定义为文字或图标。 |
keepDropdownOpen | boolean | 添加后是否保持下拉菜单展开。默认自动关闭。 |
interface SubModelItem {
key?: string;
label?: string;
type?: 'group' | 'divider';
disabled?: boolean;
hide?: boolean | ((ctx: FlowModelContext) => boolean | Promise<boolean>);
icon?: React.ReactNode;
children?: SubModelItemsType;
useModel?: string;
createModelOptions?: {
props?: Record<string, any>;
stepParams?: Record<string, any>;
};
toggleable?: boolean | ((model: FlowModel) => boolean);
}
| 字段 | 类型 | 说明 |
|---|---|---|
key | string | 唯一标识。 |
label | string | 显示文本。 |
type | 'group' | 'divider' | 分组或分隔符。省略时为普通项或子菜单。 |
disabled | boolean | 是否禁用当前项。 |
hide | boolean | (ctx) => boolean | Promise<boolean> | 动态隐藏(返回 true 表示隐藏)。 |
icon | React.ReactNode | 图标内容。 |
children | SubModelItemsType | 子菜单项,用于嵌套分组或子菜单。 |
useModel | string | 指定使用的 Model 类型(注册名)。 |
createModelOptions | object | 初始化模型时的参数。 |
toggleable | boolean | (model: FlowModel) => boolean | 开关形态,已添加则移除,未添加则添加(只允许一个)。 |
<AddSubModelButton /> 添加 subModels<AddSubModelButton /> 添加 subModels,按钮必须放到某个 FlowModel 里才能使用;model.mapSubModels() 遍历 subModels,mapSubModels 方法会解决缺失、排序等问题;<FlowModelRenderer /> 渲染 subModels。<Button>Add block</Button>,可以随处放置;<PlusOutlined />;toggleable: true 即可,默认根据类名查找,同一个类的实例只允许出现一次;toggleable: (model: FlowModel) => boolean。可以从上下文获取动态 items,例如:
ctx.api.request();ctx.dataSourceManager 提供的 API 里获取必要的数据;items 和 children 都支持 async 调用。hide 支持 boolean 或函数(支持 async);返回 true 表示隐藏;type: divider 时为分隔符;type: group 并有 children 时为菜单分组;children,但是没有 type 时为子菜单。subModelBaseClass 的 FlowModel 都会罗列出来;Model.define() 可以定义相关元数据;hide: true 标记的会自动隐藏。subModelBaseClasses 的 FlowModel 都会罗列出来;subModelBaseClasses 分组并去重。menuType=submenu 实现二级菜单Model.define({ menuType: 'submenu' }) 指定展示形态;meta.sort 混排排序。Model.defineChildren() 的方式自定义子菜单Model.defineChildren() 的方式自定义 group childrenchildren 的菜单项只要设置 searchable: true,即会在该层级显示搜索框;