DirectSurface UIDirectSurface UI
开始使用
文档/示例项目

示例:大文本编辑器

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 或页面状态提供,不要在每帧绘制时重新计算全文统计。