跳到主要内容

导航状态

导航状态

点击一行应当打开那条记录——而无需你的应用做任何路由。Bolt 拥有记录导航:选中的记录栈被序列化在 URL 中,外壳为它渲染已注册的详情表面。本指南描述该约定。

人们看到什么

Bolt 外壳渲染一个侧边栏与一个主应用表面。 PlatformApplications 是侧边栏中大写的弱化区块标签——宿主插件与租户应用保持视觉上可区分。它们本身不是导航项。

打开一条记录 不会 导航到新的文档路由。应用保持在 /app/{appName} ;选中的记录栈存在于 ?stack= 中,当 viewMode === 'sidesheet' 时外壳渲染一个详情抽屉。

┌─ TenantWorkspaceShell ─────────────────────────────────────┐
│ [Sidebar]                       │  Main app surface       │
│  PLATFORM — host plugins        │  CollectionTable / …    │
│  APPLICATIONS — tenant apps   │       │ click row        │
│                                 │       ▼                  │
│                                 │  pushes ?stack= in URL   │
└─────────────────────────────────┴─────────────────────────┘
                                          │
                    viewMode=sidesheet    ▼
              ┌──────────────────────────────────────┐
              │  Right sheet (one per stack frame)   │
              │  Record detail + breadcrumbs         │
              └──────────────────────────────────────┘

栈约定

导航状态是序列化在 ?stack= 中的单一选中记录栈:

type NavState = {
  stack: NavStackItem[];
};

type NavStackItem = {
  collection_name: string;
  record_id: string;
  node_id: string; // which surface the row was opened from (highlighting only)
  viewMode: 'page' | 'sidesheet';
};

一个栈帧标明 collection_namerecord_id ,外壳据此用该集合所声明的表示层直接渲染这条记录。无需注册,也不要求相应表格已经挂载: CollectionTableCollectionKanban 打开记录的方式,是把一个栈帧合并进 URL 栈——因此粘贴链接与点击行的结果完全一致。

路由上下文

轻量的路由上下文只标识 URL 属于哪里:组织与可选的 appName 。它不决定渲染行为。切换应用或清除选择时,外壳使用该上下文保留或重置 ?stack= ,同时停留在当前应用 URL 上。

详情表面中的表单

表格、看板与详情视图中的创建、展示与编辑共享一个编译器拥有的集合角色: +representation.svelte 。集合表面从生成的静态映射中解析它,并为创建传入 record={null} 或为展示/编辑传入现有行——调用点不注册或覆盖记录组件。参见 UI 组件

面向构建者的表面
本指南描述编写约定与 UX 模型。内部水合、作用域远程函数与外壳实现细节留在 Bolt 内部——你通过集合表面与应用入口组件交互。
  • 应用 ——外壳加载的租户应用入口组件
  • 集合 ——表格与看板表面导航进入的模型
  • UI 组件 ——表格、看板与详情中的内联表单