editorService事件
root-change
详情: dsl跟节点发生变化,editorService.set('root', {})后触发
事件回调函数:
(value: MApp, preValue?: MApp) => void查看 MApp 及关联类型定义
tsexport interface MApp extends MComponent { /** App页面类型,app作为整个结构的根节点;有且只有一个 */ type: NodeType.ROOT; /** */ items: (MPage | MPageFragment)[]; /** 代码块 */ codeBlocks?: CodeBlockDSL; dataSources?: DataSourceSchema[]; dataSourceDeps?: DataSourceDeps; dataSourceCondDeps?: DataSourceDeps; dataSourceMethodDeps?: DataSourceDeps; }tsexport interface MComponent { /** 组件ID,默认为${type}_${number}}形式, 如:page_123 */ id: Id; /** 组件类型 */ type?: string; /** 组件显示名称 */ name?: string; /** 组件根Dom上的class */ className?: string; /* 关联事件集合 */ events?: EventConfig[]; /** 是否隐藏 */ visible?: boolean; /** 显示条件中配置的数据源条件的编译结果 */ condResult?: boolean; /** 组件根Dom的style */ style?: StyleSchema; [NODE_CONDS_KEY]?: DisplayCond[]; [NODE_CONDS_RESULT_KEY]?: boolean; [key: string]: any; }tsexport enum NodeType { /** 容器 */ CONTAINER = 'container', /** 页面 */ PAGE = 'page', /** 根类型 */ ROOT = 'app', /** 页面片 */ PAGE_FRAGMENT = 'page-fragment', }tsexport interface MPage extends MContainer { /** 页面类型 */ type: NodeType.PAGE; }tsexport interface MPageFragment extends MContainer { /** 页面类型 */ type: NodeType.PAGE_FRAGMENT; }tsexport interface CodeBlockDSL { [id: Id]: CodeBlockContent; }tsexport interface DataSourceSchema { /** 数据源类型,根据类型来实例化;例如http则使用new HttpDataSource */ type: string; /** 实体ID */ id: string; /** 实体名称,用于关联时展示 */ title?: string; /** 实体描述,鼠标hover时展示 */ description?: string; /** 字段列表 */ fields: DataSchema[]; /** 方法列表 */ methods: CodeBlockContent[]; /** mock数据 */ mocks?: MockSchema[]; /** 事件 */ events: EventConfig[]; /** 不执行init的环境 */ disabledInitInJsEngine?: (JsEngine | string)[]; /** 扩展字段 */ [key: string]: any; }tsexport interface DataSourceDeps { [dataSourceId: string | number]: DepData; }
select
详情: 选中组件,editorService.select()后触发
事件回调函数:
(node: MNode) => void查看 MNode 及关联类型定义
tsexport type MNode = MComponent | MContainer | MIteratorContainer | MPage | MApp | MPageFragment;tsexport interface MComponent { /** 组件ID,默认为${type}_${number}}形式, 如:page_123 */ id: Id; /** 组件类型 */ type?: string; /** 组件显示名称 */ name?: string; /** 组件根Dom上的class */ className?: string; /* 关联事件集合 */ events?: EventConfig[]; /** 是否隐藏 */ visible?: boolean; /** 显示条件中配置的数据源条件的编译结果 */ condResult?: boolean; /** 组件根Dom的style */ style?: StyleSchema; [NODE_CONDS_KEY]?: DisplayCond[]; [NODE_CONDS_RESULT_KEY]?: boolean; [key: string]: any; }tsexport interface MContainer extends MComponent { /** 容器类型,默认为'container' */ type?: NodeType.CONTAINER | string; /** 容器子元素 */ items: (MComponent | MContainer)[]; }tsexport interface MPage extends MContainer { /** 页面类型 */ type: NodeType.PAGE; }tsexport interface MPageFragment extends MContainer { /** 页面类型 */ type: NodeType.PAGE_FRAGMENT; }
add
详情: 添加节点后触发,editorService.add()后触发
事件回调函数:
(node: MNode[]) => void
remove
详情: 删除节点后触发,editorService.remove()后触发
事件回调函数:
(node: MNode[]) => void
update
详情: 更新组件后触发,editorService.update()后触发
事件回调函数:
(data: Array<{ newNode: MNode; oldNode: MNode; changeRecords?: ChangeRecord[] }>) => void查看 ChangeRecord 类型定义
tsexport interface ChangeRecord { propPath?: string; value: any; }
move-layer
详情: 移动节点层级后触发,editorService.moveLayer()后触发
事件回调函数:
(offset: number | LayerOffset) => void其中
LayerOffset枚举值为'top'/'bottom'
drag-to
详情: 拖拽节点到指定容器后触发,editorService.dragTo()后触发
事件回调函数:
(data: { targetIndex: number; configs: MNode | MNode[]; targetParent: MContainer }) => void查看 MContainer 类型定义
tsexport interface MContainer extends MComponent { /** 容器类型,默认为'container' */ type?: NodeType.CONTAINER | string; /** 容器子元素 */ items: (MComponent | MContainer)[]; }
history-change
详情: 历史记录改变,editorService.redo(),editorService.undo()后触发
事件回调函数:
(data: MPage | MPageFragment) => void
change
详情: DSL 发生变更后统一触发,免去分别监听
add/remove/update/move-layer/drag-to。在 editorService.add()、editorService.remove()、editorService.update()、editorService.moveLayer()、editorService.dragTo() 后触发。回调参数
event通过type区分操作类型,并携带本次变更的节点列表data,每项包含变更的node及其所属的page(可能为null)。move-layer额外携带层级偏移offset,drag-to额外携带目标位置targetIndex/targetParent。注意
撤销 / 重做(
undo/redo)内部同样会经由add/remove/update触发本事件;如需区分「用户操作」与「撤销重做」,请配合 history-change 事件判断。事件回调函数:
(event: EditorChangeEvent) => void查看 EditorChangeEvent 类型定义
ts/** `change` 事件中单个变更项:变更的 node 及其所属的 page(可能为 null)。 */ export interface EditorChangeItem { node: MNode; page: StoreState['page']; } /** `update` 类型变更项:node 为前后快照及 form 端变更记录,page 为其所属页面。 */ export interface EditorUpdateChangeItem { node: { newNode: MNode; oldNode: MNode; changeRecords?: ChangeRecord[] }; page: StoreState['page']; } /** * {@link EditorEvents.change} 的回调参数:以 `type` 区分操作类型,并携带对应的操作内容。 * `data` 为本次变更的节点列表,每项包含 node 及其所属的 page(可能为 null); * `move-layer` 额外带层级偏移 `offset`,`drag-to` 额外带目标位置 `targetIndex` / `targetParent`。 */ export type EditorChangeEvent = | { type: 'add'; data: EditorChangeItem[] } | { type: 'remove'; data: EditorChangeItem[] } | { type: 'update'; data: EditorUpdateChangeItem[] } | { type: 'move-layer'; data: EditorChangeItem[]; offset: number | LayerOffset } | { type: 'drag-to'; data: EditorChangeItem[]; targetIndex: number; targetParent: MContainer };