22 June 2026, 03:30 (CST)
2026年06月21日(东八区)
功能调试:Edit Post 提交后看板明细空白
背景
按 v1.0 发布说明「下次更新计划」第 1 项,测试 解锁 → 拖拽 → Edit Post → Codeberg 粘贴提交 → ReDeplog 重建 全流程。
触发变更:Codeberg commit c02b75a(更新 kanban/2026-06-16.md)。
现象
| 页面 | 提交前 | 提交后 |
|---|---|---|
列表页 /kanban/ | 正常:stats、进度条、星级 | 正常:待办 3 / 进行中 3 / 进度 60% 已更新 |
明细页 /kanban/2026-06-16/ | 五列 + 卡片 + 拖拽 | 空白:仅标题与「已锁定」,无列无卡片 |
初看像「映射规则解析失败」,因为明细区完全无 DOM 输出。
问题定位
排除解析层
用kanban-rules.js对提交后的kanban/2026-06-16.md做parseMarkdown:仍得到 5 列、12 张卡片,映射规则本身无异常。对比 commit diff
用户粘贴的 Markdown 在 front matter 中删掉了:styles = ["kanban/style.css"] scripts = ["js/kanban-rules.js", "js/kanban-board.js"]根因是
serializeMarkdown()序列化时不会写回这两项,Edit Post 往返必然丢失。脚本加载链
明细页看板 100% 客户端渲染:kanban-board.jsfetch/kanban/<slug>.md→parseMarkdown→ 写 DOM。
脚本来源(themes/ametrine的head.html):- 有
page.extra.scripts→ 用页面级 - 否则 → 回退
section.extra.scripts
配置 实际加载 页面 FM 含 scriptskanban-rules.js+kanban-board.js✓页面 FM 无 scriptssection 仅 kanban-rules.js+kanban-list.js✗ 缺 board.js列表页只需
kanban-list.js,故列表正常;明细页缺kanban-board.js,故空白。- 有
解决思路
原则:明细页核心脚本不应依赖 front matter 是否被 Edit Post 保留。
templates/kanban.html
模板内固定注入kanban-rules.js+kanban-board.js(与已有 inlinekanban/style.css一致),脱离page.extra.scripts。static/js/kanban-board.js
解析结果columns为空时,在#kanban-status输出明确错误,便于与「脚本未加载」区分。正反映射
parseMarkdown→serializeMarkdown→parseMarkdown往返:列/卡片/stats 保持一致;FM 的styles/scripts非看板数据,不写入序列化输出,避免与模板重复加载。
修改文件
| 文件 | 变更 |
|---|---|
templates/kanban.html | 文末 <script defer> 加载 rules + board |
static/js/kanban-board.js | 空解析结果时 status 报错 |
验证
- Node 往返:5 列 → 5 列,12 卡 → 12 卡
zola build --force通过;产物/kanban/2026-06-16/含kanban-board.js- 部署后:即使 FM 无
scripts(与远程 commit 一致),明细页也应正常渲染
经验
- 列表与明细共用 section,但脚本需求不同 → 明细模板应自包含,不能假设 page FM 永远完整。
- Edit Post 是数据回写路径 → 序列化只负责看板 Markdown 本体;运行时依赖放模板/静态层更稳。
- 排查时先区分「没加载 JS」与「JS 加载但解析失败」:前者 DOM 容器空、无报错;后者可在 status / console 看到线索。