探索 Tiptap V3 的最新功能

命名和结构化你的协作文档

Collaboration

本指南概述了命名文档和组织单一文档内容的最佳实践,以帮助您定义自己的文档结构。

要全面了解如何选择文档名称,您应该查看我们的 授权指南,因为文档命名在访问控制中也发挥着关键作用。

结构化文档名称

Tiptap 协作使用文档名称来促进协作会话,它们作为唯一标识符将用户链接到同一个文档。在理论上,它可以是任何字符串。

虽然以下示例使用实体名称与唯一 ID 的组合,这在 CMS 应用程序中很常见,但您可以自由采用适合应用程序要求的任何命名约定。

新文档会根据需要自动生成;您只需向提供者提供一个字符串标识符。

const documentName = 'article.123'

这种命名格式允许您轻松分离关键细节:

const documentName = 'article.123'

// 将文档名称拆分成不同部分
const [entityType, entityID] = documentName.split('.')

console.log(entityType) // 输出: "article"
console.log(entityID) // 输出: "123"

使用片段管理嵌套文档

Yjs 的片段非常适合处理具有不同部分的复杂文档。如果您想要嵌套文档,例如一个具有单独 titlecontent 部分的博客文章,则可能相关。

使用片段,您可以使用一个 Y.Doc 实例(例如一个文档)并为其不同部分使用不同的编辑器。

例如,在此博客文章设置中:

const ydoc = new Y.Doc()

// 标题编辑器
const titleEditor = new Editor({
  extensions: [
    Collaboration.configure({
      document: this.ydoc,
      field: 'title',
    }),
  ],
})

// 内容编辑器
const bodyEditor = new Editor({
  extensions: [
    Collaboration.configure({
      document: this.ydoc,
      field: 'content',
    }),
  ],
})

对于具有嵌套片段的复杂设置,您可以直接使用原始 Y.js 片段,绕过 documentfield 设置。

// 一个原始的 Y.js 片段
Collaboration.configure({
  fragment: ydoc.getXmlFragment('custom'),
})

要完全理解文档命名如何影响 Tiptap 协作中的访问控制,查阅我们的 授权指南 是必不可少的。