导航状态
导航状态
点击一行应当打开那条记录——而无需你的应用做任何路由。Bolt 拥有记录导航:选中的记录栈被序列化在 URL 中,外壳为它渲染已注册的详情表面。本指南描述该约定。
人们看到什么
Bolt 外壳渲染一个侧边栏与一个主应用表面。 Platform 与 Applications 是侧边栏中大写的弱化区块标签——宿主插件与租户应用保持视觉上可区分。它们本身不是导航项。
打开一条记录 不会 导航到新的文档路由。应用保持在 /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_name 与 record_id ,外壳据此用该集合所声明的表示层直接渲染这条记录。无需注册,也不要求相应表格已经挂载: CollectionTable 与 CollectionKanban 打开记录的方式,是把一个栈帧合并进 URL 栈——因此粘贴链接与点击行的结果完全一致。
路由上下文
轻量的路由上下文只标识 URL 属于哪里:组织与可选的 appName 。它不决定渲染行为。切换应用或清除选择时,外壳使用该上下文保留或重置 ?stack= ,同时停留在当前应用 URL 上。
详情表面中的表单
表格、看板与详情视图中的创建、展示与编辑共享一个编译器拥有的集合角色: +representation.svelte 。集合表面从生成的静态映射中解析它,并为创建传入 record={null} 或为展示/编辑传入现有行——调用点不注册或覆盖记录组件。参见 UI 组件。
面向构建者的表面
本指南描述编写约定与 UX 模型。内部水合、作用域远程函数与外壳实现细节留在 Bolt 内部——你通过集合表面与应用入口组件交互。