6.3 KiB
6.3 KiB
IconbarPage 技术文档
模块路径:
bricks.IconbarPage
继承自:bricks.VBox
用途: 提供一个带有图标工具栏的页面容器,支持顶部或底部布局,并可动态加载内容组件。
概述
bricks.IconbarPage 是一个基于 bricks.VBox 的复合组件,用于构建具有图标文本工具栏(IconTextBar)和内容区域的页面。工具栏可置于页面顶部或底部,点击工具项时会触发对应的内容展示逻辑。
该组件适用于需要导航式界面的应用场景,如设置页、功能面板或多标签界面。
类定义
bricks.IconbarPage = class extends bricks.VBox { ... }
构造函数
constructor(opts)
初始化 IconbarPage 实例。
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
opts |
Object | 配置选项对象 |
opts 结构
| 属性 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
bar_opts |
Object | 是 | - | 图标工具栏的配置选项,传递给 bricks.IconTextBar |
bar_at |
String | 否 | 'top' |
工具栏位置,可选 'top' 或 'bottom' |
height |
String | 否 | '100%' |
自动设置为 100%,确保占满父容器高度 |
bar_opts 子属性
| 属性 | 类型 | 说明 |
|---|---|---|
margin |
Number/String | 工具栏外边距 |
rate |
Number | 布局占比(在 VBox 中使用的伸缩比例) |
tools |
Array<Tool> | 工具项列表,每个工具项定义一个可点击的操作 |
tools 数组中的 tool 对象结构
| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
name |
String | 是 | 工具名称,作为唯一标识 |
icon |
String | 是 | 图标类名(如 Font Awesome 类名) |
label |
String | 否 | 显示文本(可选) |
tip |
String | 是 | 鼠标悬停提示文本 |
dynsize |
Boolean | 否 | 是否动态调整大小 |
rate |
Number | 否 | 在布局中所占比例 |
context |
Object | 否 | 附加上下文数据,可用于命令处理 |
content |
WidgetConfig / Function / Promise | 是 | 要加载的内容组件配置或异步构造逻辑 |
成员属性
| 属性 | 类型 | 描述 |
|---|---|---|
bar_at |
String | 存储工具栏位置('top' 或 'bottom') |
content |
bricks.Filler |
内容容器,用于动态插入当前选中的工具对应的内容组件 |
bar |
bricks.IconTextBar |
创建的图标文本工具栏实例 |
方法
command_handle(event) → Promise<void>
处理来自工具栏的命令事件(例如点击某个工具按钮),并加载对应的内容。
参数
event: 事件对象params: 触发事件的tool对象(即被点击的工具项)
行为
- 获取触发事件的
tool - 调用
show_content(tool)异步加载内容
⚠️ 使用
bind(this)绑定上下文,在构造时通过bar.bind('command', ...)注册。
show_content(tool) → Promise<void>
根据传入的 tool 动态创建并显示其对应的内容组件。
参数
tool: 工具项对象(包含content字段)
流程
- 使用
bricks.widgetBuild(tool.content, this)异步生成组件实例 - 若组件存在且尚未添加到 DOM 树,则将其加入
this.content容器 - 替换当前内容区域的内容(旧内容会被自动移除?取决于
Filler实现)
✅ 支持异步组件加载,适合懒加载或远程模块。
生命周期与初始化行为
- 设置默认高度为
'100%' - 确定工具栏位置(默认为
'top') - 调用父类
super(opts)初始化 VBox 布局 - 创建
IconTextBar实例并传入bar_opts - 创建
Filler作为内容占位符 - 根据
bar_at决定工具栏与内容的排列顺序:'top': 先工具栏,后内容'bottom': 先内容,后工具栏
- 绑定
command事件监听器到command_handle - 使用
schedule_once延迟 0.1 秒自动显示第一个工具项的内容
🕒
schedule_once(..., 0.1)可避免渲染冲突,确保 DOM 就绪后再加载初始内容。
示例用法
var page = new bricks.IconbarPage({
bar_at: 'top',
bar_opts: {
margin: 5,
rate: 0,
tools: [
{
name: 'dashboard',
icon: 'fa fa-tachometer',
label: '仪表盘',
tip: '查看系统状态',
rate: 1,
content: { type: 'DashboardWidget', opts: {} }
},
{
name: 'settings',
icon: 'fa fa-cog',
tip: '系统设置',
content: async function() {
let mod = await import('./SettingsPanel.js');
return new mod.SettingsPanel();
}
}
]
}
});
document.body.appendChild(page.root);
事件机制
- 事件类型:
command - 触发源:
bricks.IconTextBar - 携带参数:
event.params包含完整的tool对象 - 监听方式: 在
IconTextBar上绑定command事件
注册信息
bricks.Factory.register('IconbarPage', bricks.IconbarPage);
可通过工厂方法创建:
bricks.Factory.create('IconbarPage', {...opts});
注意事项
- 内容清理:当前实现未显式清除旧内容,依赖
Filler组件的行为。若需手动管理,请扩展show_content方法。 - 性能优化:首次加载延迟 0.1s,建议确认是否必要;可考虑使用
requestAnimationFrame或更精确的时机控制。 - 错误处理:
widgetBuild失败时无异常捕获,建议包裹try-catch增强健壮性。
依赖组件
bricks.VBox—— 垂直布局容器bricks.IconTextBar—— 图标+文本工具栏bricks.Filler—— 内容填充容器bricks.widgetBuild—— 异步构建组件的工具函数schedule_once—— 延迟执行工具函数(通常为setTimeout封装)
版本历史
| 日期 | 修改人 | 说明 |
|---|---|---|
| 2025-04-05 | AutoDoc Generator | 根据源码生成技术文档 |
✅ 文档完成
📌 推荐配合 IconTextBar 文档一起阅读以理解完整交互逻辑。