Khái niệm cốt lõi
Mô hình khối
Trung tâm của EditorData là mảng blocks: các đối tượng Block giữ nguyên thứ tự. Mỗi Block mang kiểu của nó (type), dữ liệu theo kiểu (data), và metadata tunes tùy chọn.
| Trường | Kiểu | Mô tả |
|---|---|---|
| id | string | undefined | Mã định danh duy nhất tùy chọn, được editor gán tại thời điểm tạo. |
| type | BlockToolType | Khóa ký tự liên kết khối với schema, thành phần nhập liệu và bộ kết xuất của nó. |
| data | object | Đối tượng dữ liệu theo kiểu: hình dạng khác nhau theo từng loại khối. |
| tunes | BlockTunes | undefined | Từ điển metadata tune tùy chọn đa kiểu. Khóa là tên tune và giá trị là dữ liệu tự do. |
{
"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." }
}
]
}Công cụ khối so với công cụ nội tuyến
Các công cụ khối tạo ra các khe cắm cấp cao nhất trực tiếp bên trong EditorData. Các công cụ nội tuyến trang trí văn bản bên trong payload html mà một khối chứa. Hai lớp này hoàn toàn tách biệt, chúng không thể thay thế cho nhau.
Đầu ra JSON-first
Trình soạn thảo không bao giờ lưu trữ HTML. Khi bạn gọi editor.data.extract(), bạn nhận được JSON EditorData thuần túy: hoàn chỉnh bao gồm cả URL media. JSON này có thể được lưu trong cơ sở dữ liệu, cá nhân hóa hoặc chuyển đổi sang các định dạng khác.
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 so với Renderer
Điều chỉnh khối
Tunes là một khe metadata không phụ thuộc vào kiểu cho bất kỳ loại khối nào. Khóa là tên tune do hệ thống hoặc plugin đặt, và giá trị được gõ thành BlockTuneData: bất kỳ sự kết hợp nào của string, number, boolean hoặc null. Tunes có thể thêm ngữ nghĩa mà không phá vỡ hình dạng dữ liệu cốt lõi.
{
"id": "abc123",
"type": "paragraph",
"data": { "html": "Some text." },
"tunes": {
"textAlign": { "alignment": "center" },
"visibility": { "hidden": false }
}
}