NodeTypeDefinition
节点定义描述“存什么、怎样排版和绘制、支持哪些操作”。它不等于浏览器组件,也不持有DOM或Leafer实例。可运行完整示例见自定义节点。
标识与创建
| 成员 | 作用 |
|---|---|
type | 全局节点类型标识,与createNode.nodeType对应 |
label | 面向使用者的名称 |
defaultData | 默认开放业务载荷 |
createContent?(options) | 可选创建能力;供新建的节点类型返回NodeCreateContent:必需宽高及可选文本、样式、布局、具名扩展字段 |
createContent只生成纯数据。节点ID、父容器、坐标、层级等由文档创建命令统一处理,不在该函数中直接操作状态树。
组合等通过既有内容派生生成的类型可以不提供空节点创建入口,不能假定每个已注册类型都可以通过工具栏直接新建。
创建参数与字段扩展
在NodeCreateOptionsMap中登记选项,在CustomNodeFields中登记专用状态。已知结构应使用例如node.ideaCard.status的具名字段,而不是把所有节点状态塞入node.data。
编译期类型不会自动验证外部业务载荷。外部导入还需要文档校验和相应业务字段约束;读取可选扩展字段时应考虑缺失值。
文本与尺寸
| 成员 | 默认 / 使用场景 |
|---|---|
slots | 声明文本块语义、默认文字样式和尺寸策略 |
defaultStyle | 节点默认外观,节点自身样式可覆盖 |
sizingPolicy | 缺省fixed,内容驱动节点可声明相应策略 |
computeBounds | 需要根据多个文本槽测量结果求节点尺寸时使用 |
measureBlockWidth | 为某文本块提供实际折行宽度 |
layoutTriggerFields | 额外触发重新排版的顶层扩展字段 |
fitContent | 节点外框“适应内容”的可选实现 |
标题、正文等可编辑内容放入textBlocks并绑定slot,绘制时使用相同的文本块和解析后的样式。不要另存一份字符串用于绘制、再留一份用于编辑。
声明式绘制
compose(node, context)返回CanvasPrimitive[]。可用矩形、文字、圆、路径等中间图元,颜色使用主题语义或调色板引用。计算应由节点当前状态推导,不修改传入实体。
可选composeTextBlock为单文本块提供编辑图元;复杂多块节点可使用composeParts/composeChangedParts分片更新。简单节点先采用完整compose,不必为少量图元引入复杂的分片缓存。
需要Leafer原生生命周期渲染时,在渲染适配器侧实现并注册,通用节点包仍保持平台中立。
容器、几何与能力
acceptsChildren决定是否接受拖入的子节点;子节点坐标相对父容器。clipChildren决定超出容器外框的内容是否被裁剪。outline/hitTest/anchors等几何能力用于轮廓、命中或连线吸附,不应只凭包围盒模拟所有形状。- 比例锁定、缩放轴、内容缩放与圆角能力由定义和节点状态共同决定,宿主UI先查询Editor公开能力。
- 媒体节点声明资产引用,通过
assetId连接资产表;二进制由宿主适配器管理。
具体签名以当前Core公开类型为准。本页覆盖常用扩展路径;布局、资产与渲染的高级能力不意味着每个自定义节点都必须实现。