4.5 KiB
Menu
用途:Menu 是一个用于构建树形结构菜单的容器控件,支持多级子菜单、动态加载子菜单内容(通过 URL 异步加载)、点击触发页面跳转或弹窗等功能。常用于侧边栏导航、系统功能入口等场景。
类型:容器控件,继承自 bricks.VBox
主要方法
-
create_menuitem(item)
根据菜单项配置创建一个 HBox 形式的菜单项,包含图标和文本,并绑定数据。 -
create_submenu_container()
创建一个用于包裹子菜单的 VBox 容器,默认隐藏(display: none),并设置左外边距以实现缩进效果。 -
create_children(w, items)
递归创建菜单项及其子菜单。支持静态嵌套菜单(items)和动态加载菜单(submenu属性指定 URL)。 -
menu_clicked(event)
菜单项被点击时的回调函数。根据目标类型(如PopupWindow、Popup或普通控件)加载远程 UI 并渲染到目标容器中,同时派发command事件。 -
load_submenu(container, event)
动态加载子菜单内容(通过submenu_url指定的 URL 获取 JSON 数据),仅在首次展开时加载一次,提升性能。 -
items_toggle_hide(w, event)
切换子菜单的显示/隐藏状态,阻止事件冒泡。 -
regen_menuitem_event(item, event)
当普通菜单项被点击时,重新派发item_click事件,携带该菜单项的数据。 -
get_submenu_items(url)
异步从服务器获取子菜单数据(返回 JSON 中的items数组),用于动态加载。
主要事件
-
item_click
当任意菜单项被点击时触发,参数为当前菜单项的配置对象(如label,url,target等)。通常由regen_menuitem_event触发。 -
command
在menu_clicked方法中派发,表示已执行某个命令(例如跳转、打开弹窗等),携带原始菜单项参数,可用于外部监听处理业务逻辑。
源码例子
{
"id": "main_menu",
"widgettype": "Menu",
"options": {
"bgcolor": "#f5f5f5",
"item_cheight": 2.5,
"menuitem_css": "custom-menu-item"
},
"subwidgets": [],
"binds": [
{
"actiontype": "bricks",
"wid": "main_menu",
"event": "command",
"target": "status_bar",
"datawidget": "main_menu",
"datamethod": "getValue",
"rtdata": {
"message": "菜单命令已执行"
}
}
],
"options": {
"items": [
{
"label": "仪表盘",
"icon": "/icons/dashboard.png",
"url": "/ui/dashboard.ui",
"target": "content_area"
},
{
"label": "用户管理",
"icon": "/icons/users.png",
"items": [
{
"label": "用户列表",
"url": "/ui/user/list.ui",
"target": "content_area"
},
{
"label": "角色权限",
"url": "/ui/user/roles.ui",
"target": "Popup"
}
]
},
{
"label": "报表中心",
"icon": "/icons/reports.png",
"submenu": "/api/menu/reports", // 动态加载子菜单
"target": "content_area"
},
{
"label": "系统设置",
"icon": "/icons/settings.png",
"url": "/ui/settings.ui",
"target": "PopupWindow",
"popup_options": {
"width": 800,
"height": 600,
"title": "系统设置"
}
}
]
}
}
注释说明:
"widgettype": "Menu":使用注册的Menu控件。options.items:定义菜单结构数组,每个元素是一个菜单项。label:显示文本,支持 i18n。icon:左侧图标路径。url:点击后要加载的.ui文件地址。target:目标容器 ID 或特殊值:"content_area":普通容器控件 ID。"Popup":在浮层中打开。"PopupWindow":在新窗口中打开。
items:静态嵌套子菜单。submenu:字符串 URL,表示此菜单项的子菜单需异步加载(首次点击展开时请求)。
binds示例:监听command事件,在状态栏提示操作成功。options.bgcolor:设置菜单背景色。item_cheight:控制菜单项高度。menuitem_css:自定义菜单项样式类名。
💡 提示:若某菜单项有
submenu字段,则其子菜单将在第一次展开时通过 AJAX 请求获取,适用于大型系统中按需加载菜单结构,减少初始资源消耗。