跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScriptSaaS大前端

Rancher UI 菜单模块源码深度解析

Rancher UI 菜单模块源码分析聚焦于 authenticated 模块下的 page-header 组件。核心逻辑围绕 pageScope 变量展开,区分 global、cluster 与 project 三级作用域。updateNavTree 函数结合 getTree 与 bulkAdd 方法动态生成导航树结构。文章拆解了菜单项的数据模型,包括 localizedLabel、route 及 submenu 配置,帮助开发者快速定位前端路由与权限控制的关键实现点。

云朵棉花糖发布于 2020/9/3更新于 2026/9/1055 浏览
Rancher UI 菜单模块源码深度解析

菜单逻辑贯穿整个认证后的主界面,定位入口时直接在 app/authenticated 模块下查找。

组件入口

打开 template.hbs 文件,顶部的 page-header 组件承载了导航内容。这个组件负责渲染顶部菜单的视觉结构。

核心逻辑

所有菜单的动态渲染逻辑都集中在 updateNavTree 函数中。该函数调用 getTree() 获取基础数据,并通过全局搜索 bulkAdd 方法定位到定义菜单数据的文件。

作用域机制

pageScope 变量决定了当前页面的作用域,直接影响一级与二级菜单的显示层级:

  • global:全局菜单
  • cluster:集群级菜单
  • project:项目级菜单

数据结构示例

子菜单项通常包含以下字段:

{
  scope: 'global',
  id: 'global-catalogs',
  localizedLabel: 'nav.admin.catalogs',
  route: 'global-admin.catalog',
  resource: ['catalog'],
  resourceScope: 'global'
}

主菜单项示例:

{
  scope: 'project',
  id: 'infra',
  localizedLabel: 'nav.infra.tab',
  ctx: [getProjectId],
  submenu: []
}

源码注释参考

以下是 Tree Item 选项的部分注释摘录,有助于理解配置项含义:

/* Tree item options {
  id: 'str' (identifier to allow removal... should be unique)
  localizedLabel: 'i18n key', (or function that returns one)
  label: 'Displayed unlocalized label', (or function that returns string)
  icon: 'icon icon-something',
  condition: function() { // return true if this item should be displayed
    // condition can depend on anything page-header/component.js shouldUpdateNavTree() depends on
  },
  target: '_blank', (for url only)
  route: 'target.route.path', // as in link-to
  ctx: ['values', 'asContextToRoute', orFunctionThatReturnsValue, anotherFunction]
  qp: {a: 'hello', b: 'world'],
  moreCurrentWhen: ['additional.routes','for.current-when'],
  submenu: [ // Another tree item (only one level of submenu supported, no arbitrary depth nesting)
    {...},
    {...}
  ]
} */

注意:以上注释摘自源码,具体版本可能有所差异,实际开发请以最新代码为准。

目录

  1. 组件入口
  2. 核心逻辑
  3. 作用域机制
  4. 数据结构示例
  5. 源码注释参考

更多推荐文章

查看全部
  • Photoshop Stable Diffusion 插件安装与使用指南
  • Java8 国内 JDK 下载链接及华为镜像源地址
  • OpenCode、OpenClaw 与 TuriX-CUA 的安装配置
  • 无人机 Remote ID Beacon 帧字段详解
  • R 语言在 AIGC 时代的数据处理与建模实践
  • Quilter:把 PCB 设计交给物理驱动的 AI
  • Python 内置函数:enumerate()、eval()和 exec()
  • 2026 AI 编码工具对比:Claude Code、Cursor 与 GitHub Copilot 选型指南
  • 文心一言多线程批量写作辅助工具开发实践
  • 人工智能:自然语言处理在金融领域的应用与实战
  • Spring Boot 药品进销存信息管理系统毕业设计项目
  • C++ unordered_set 与 unordered_map 详解
  • GCC 编译器使用与调试基础指南
  • 极客大挑战 2025 Web 安全题目复现
  • Linux Shell 运行原理及权限管理详解
  • Python 通达信接口实战:量化投资数据获取与高效应用
  • 基于 Docker 部署 Ollama 与 AnythingLLM 构建本地 LLM Agent
  • 思源黑体 NotoSansSC-Regular.otf 字体介绍与特点
  • 数据结构:二叉树与堆的实现详解
  • MCP 工具安装指南:npx 与 uvx 全流程使用

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online