为什么点哪条资讯都显示同一条:从鸿蒙公交模板的一个定制任务说起
鸿蒙案例中心里「公交出行应用模板」的定制任务,题目很朴素:新增一条公交演示资讯。但它的约束里藏着一个很多人踩过的坑——「当前 NewsDetail 固定读取首项详情,须补列表 id 到详情的映射及缺失回退」。这句话翻译一下就是:现在你点列表里任何一条资讯,打开的详情都是第一条。加数据之前,先把这个映射补上。
为什么会出现「点哪条都一样」
这类模板工程通常这样写:列表页从 newsData 里 map 出卡片,卡片点击后跳详情页;详情页不去取路由参数里的 id,而是直接 newsDetailPiece 或者 newsData[0]。因为样例数据只有一两条,开发时看不出问题,等有人往列表里加了第三条,毛病才暴露。
它本质上是数据关联没建立起来:列表项有 id,详情数据也有 id,中间少了一根线。修法不复杂,但要三件事一起做,只做前两件仍然会翻车。
第一步:把 id 传过去
路由跳转时带上当前项的 id,详情页从路由参数里取。注意别在列表渲染的闭包里直接用循环变量,ArkTS 的闭包捕获在快速点击时容易拿到错位的值,用当前项的稳定标识比较稳。
第二步:用 id 去查,而不是取第一项
详情页拿到 id 之后,去 newsDetailPiece 里按 id 匹配。这里有个细节:两个数据源要能对上。模板里 newsData 是列表摘要,newsDetailPiece 是详情正文,如果两份数据的 id 体系不一致,映射就会永远匹配失败,表现和「点哪条都一样」几乎一样,只是变成空白。改之前先把两份数据的 id 对一遍。
第三步:补缺失回退
这是约束里明确要求的,也是最容易漏的:id 传了、匹配也可能为空(数据没录全、缓存过期、深链进来带了不存在的 id)。这时候不能白屏,也不能静默跳到第一条假装成功,应该给一个明确的缺失态,并且保证返回、再次进入列表都正常。
顺带核对的几处工程信息
这个案例页面上写得挺清楚,动手前值得先读:工程入口是 entry,构建清单声明 8 个模块;依赖是 common、routedesign、codescan、personalcenter、frontpage,资讯数据在 feature/frontpage 模块下,具体文件是 feature/frontpage/src/main/ets/mock/MockData.ets;工具链兼容 5.0.0(12)、目标 5.0.0(12),跟万年历那个案例的 6.0.1(21) 不是一套,跨案例抄配置会直接构建失败。
页面还写明数据范围:本地线路数据和页面入口与外部地图、账号能力是分别配置的。也就是说改资讯的时候,不要去动地图和账号那部分,回归范围只要覆盖新增条目与详情、无匹配分支、原线路搜索和返回,就够验收了。
验收别只看「能点开」
案例页给的预期结果是三句话:首页出现新资讯、点击后显示对应详情、缺失详情有回退。真正容易漏的是第二句的「对应」——点第一条看第一条、点第二条看第二条,得挨个点;以及第三句的回退,要专门造一个匹配不上的 id 去试。只点一次第一条就宣布通过,等于没测。
一个看起来只是加数据的任务,实际考的是列表与详情的关联、以及异常分支的处理。这类坑在真实业务里也常见:详情页永远显示第一条、空数据白屏、深链进来崩溃。照着案例页的约束一条条对,比事后排查省事得多。
- 点赞
- 收藏
- 关注作者
评论(0)