跳到主要内容

核心概念

区块模型

EditorData 的核心是 blocks 数组:保存顺序的 Block 对象。每个 Block 包含其类型(type)、类型特定数据(data)以及可选的 tunes 元数据。

字段类型描述
idstring | undefined可选的唯一标识符,由编辑器在创建时分配。
typeBlockToolType将区块与其模式、输入组件和渲染器关联的字面量键。
dataobject类型特定的数据对象:每种区块类型的结构各不相同。
tunesBlockTunes | undefined可选的跨类型调整元数据字典。键是调整名称,值是自由格式数据。
JSON
{
  "time": 1745000000000,
  "version": "1.0.0",
  "blocks": [
    {
      "id": "abc123",
      "type": "header",
      "data": { "html": "Hello world", "level": "h1" }
    },
    {
      "id": "def456",
      "type": "paragraph",
      "data": { "html": "This is a <b>rich</b> paragraph." }
    }
  ]
}

区块工具与行内工具

区块工具在 EditorData 中直接创建独立的槽位。行内工具则在区块包含的 html 载荷中装饰文本。这两层完全独立,不能相互替换。

JSON 优先输出

编辑器从不持久化 HTML。当您调用 editor.data.extract() 时,得到的是纯粹的 EditorData JSON:包括媒体 URL 在内的完整数据。该 JSON 可以存入数据库、个性化处理或转换为其他格式。

TypeScript
import { Editor } from '@clepit/core';

const editor = Editor.create({ containerId: 'editor' });

const data = editor.data.extract();
// data: EditorData
// {
//   time: 1745000000000,
//   version: '1.0.0',
//   blocks: [ ... ]
// }

Editor 与 Renderer

Editor 使用浏览器 DOM 供用户编辑内容(仅限浏览器)。Renderer 获取事先保存的 EditorData 并将其渲染为 HTML(可在浏览器或 SSR 中运行)。

区块调整

Tunes 是任何区块类型的类型无关元数据槽。键是系统或插件设置的调整名称,值类型为 BlockTuneData:任意 string、number、boolean 或 null 的组合。Tunes 可以在不破坏核心数据形状的情况下添加语义。

JSON
{
  "id": "abc123",
  "type": "paragraph",
  "data": { "html": "Some text." },
  "tunes": {
    "textAlign": { "alignment": "center" },
    "visibility": { "hidden": false }
  }
}