示例:大文本编辑器
LIVE CANVAS可运行组件示例
ON-DEMAND RUNTIME交互式示例将在进入视区时启动避免文档首屏同时初始化多个 Canvas Runtime
import { PlainTextEditorController, RenderPlainTextEditor } from 'ds-ui'
大文本编辑器适合查看和编辑日志、JSON、SQL、接口响应和配置文本。它不提供富文本能力,重点是几十万行文本下仍然可以滚动、搜索、折叠和编辑。
页面结构
StackPanel vertical
Toolbar
PlainTextEditor flex=1
StatusBar
工具栏负责打开、搜索、跳转、格式化等命令。编辑器负责文本模型、虚拟绘制、选区、输入和折叠。
基本示例
const controller = new PlainTextEditorController({ value: '{\n "name": "ds-ui"\n}', language: 'json',}) const editor = new RenderPlainTextEditor({ controller, showLineNumbers: true, folding: true, tabSize: 4,})
大文件打开
大文件打开时要注意:
- 不要先放入普通 textarea。
- 不要在 UI 线程做复杂格式化。
- 粘贴大文本时拦截 paste 数据。
- 更新文档后按需恢复或重置滚动位置。
- 页面关闭时释放 controller 和相关缓存。
JSON 场景
JSON 文本常见能力:
- 语法着色。
- 层级缩进。
- 折叠对象和数组。
- 双击选择 key 或 value 字符串。
- 搜索命中和当前命中区分。
折叠和着色都应该基于解析或 token 结果,不要每次绘制都重新解析全文。
交互基线
几十万行文本下,点击和拖选应只处理可视行和必要索引。光标定位不能扫描所有行。横向滚动时,文本不能绘制进左侧行号区域。
如果打开大文件后整个应用的输入都卡顿,优先检查隐藏输入控件是否承载了完整大文本。
状态栏建议
状态栏可以显示:
- 当前行列。
- 总行数。
- 语言模式。
- 是否只读。
- 搜索结果数量。
- 文件大小。
这些信息由 controller 或页面状态提供,不要在每帧绘制时重新计算全文统计。