篮球口袋教练 HarmonyOS 学习应用(04):篮球战术分类与专项训练模型
战术课不是把所有内容平铺在一个长列表里就结束了。用户需要先看到完整战术范围再按进攻、防守、挡拆或转换迅速缩小范围。篮球口袋教练为战术模块定义固定的子分类再将当前分类状态传给列表过滤逻辑让标签选中态和课程结果来自同一份状态。一、分类定义先于页面展示战术模块提供“全部、进攻、防守、挡拆、转换”五个标签。课程数据也带有所属子分类因此界面并不依靠标题关键字猜测归属。export const TACTICS_SUB_CATEGORIES: SubCategory[] [ { id: all, label: 全部 }, { id: offense, label: 进攻 }, { id: defense, label: 防守 }, { id: screen, label: 挡拆 }, { id: transition, label: 转换 } ]这种模型让新增课程时只需选择已有分类若未来增加“快攻落位”等专题也能新增分类 id而不会在每个页面复制一套筛选分支。二、选中标签怎样驱动课程列表分类页持有当前subCategoryId。当它不是all时先过滤出匹配课程再按既有排序规则排列当它是all时页面按子分类组合展示完整列表。private filtered(): Course[] { const all coursesByModule(this.moduleId) if (this.subCategoryId ! all) { return this.videoFirst(all.filter(c c.subCategory this.subCategoryId)) } return this.groupedCourses(all) }用户动作当前分类课程列表初次进入全部按战术子分类组合展示点击进攻offense只保留进攻课程点击防守defense只保留防守课程再点击全部all恢复完整课程范围三、手机模拟器回读本次在手机模拟器中从首页进入“战术策略”。页面先显示五个标签和包含进攻、防守内容的“全部”列表点击“进攻”后“进攻”标签变为选中态列表回读为“五外站位、底线空切、进攻空间、破全场紧逼”四项。该结果证明标签状态和过滤列表在一次真实动作链中同步变化。四、专项训练入口为什么放在分类页分类页在课程列表之后提供“开始知识测验”入口并带上当前模块 id。这样测验题目可与当前学习主题保持关联课程页无需知道测验的具体实现。分类本身不保存答题分数只负责发起进入测验完成后的记录再由测验服务管理。五、需要明确的边界本次验证覆盖的是战术分类进入、进攻标签切换和课程过滤结果。它不代表每个战术课程都已完成学习也不代表后台存在推荐算法。把数据分类、界面筛选和后续测验入口拆开才能在继续扩充课程时维持清楚的职责边界。