自定义页面 Block

这不是一个 Java SPI。 AuraBoot 没有 PageBlockExtension 之类的插件扩展点。页面 Block 的能力由平台前端的渲染注册表后端 DSL 白名单共同决定。下面是真实机制。

内置 Block 类型 —— DslRegistry.BlockType

页面 Block 的真源是平台后端的 DslRegistry.BlockType 枚举 (com.auraboot.framework.meta.constant.DslRegistry,Java)。它定义了所有内置 blockType,例如: form-sectiondetail-sectionform-buttonsfiltersembedded-listcard-gridchartgalleryganttcalendarheatmapgaugefunnelbpm-panelevidence-panelactivity-timelinefield-historyiframeimagedividerdescriptionactioncompositecustom 等。页面 schema 的 blocks[].blockType 取这些值, schemaVersion4

自定义 Block —— 前端 BlockRegistry

要加一个平台没有的 Block,机制是在前端注册一个渲染器,而不是写 Java 插件:

  1. 前端注册:在 web-admin/app/ui/schema-renderer/BlockRegistry.tsBlockRegistry.register(blockType, { component, normalizeData }) 注册——component 是 React 渲染组件,可选的 normalizeData(raw, block) 把 API 原始 payload 整形成组件期望的结构。组件按 blockType 懒加载,不会把所有 Block 拉进主 bundle。
  2. 页面引用:页面 schema 的 blocks 里用该 blockType 引用它,配置数据源/属性。
  3. 后端容忍未知类型:PageSchemaBlockStructureValidator 对不在白名单里的 blockType 只记软告警 S-PAGE-BLOCK-TYPE,不硬拒——这是刻意的前向兼容,custom 插件 Block 才能挂上、未来新增 blockType 不会被旧后端拒掉。

典型错误

  • 只在前端注册、不进后端 DslRegistry.BlockType:导入时报 [S-PAGE-BLOCK-TYPE] 软告警。Block 仍能渲染(前向兼容),但若希望它成为白名单内的「一等」类型,需要在后端 DslRegistry.BlockType 加一个枚举值。
  • records 数据源没配 adaptor:table:默认会按 optionList 映射成 {value,label} 毁列;列表/表格类 Block 的 dataSourceadaptor:table
  • 把自定义 Block 当成 Java 扩展点找:没有 PageBlockExtension/@PageBlock 注解——渲染在前端,后端只做 schema 校验。

相关