「空间有了,但是不是我想要的空间,这个空间需要换。」
「空间」= 「控件」(口误)。经确认:
「现在显示的是五个下拉框,不对」
点开首页任务 → 面板里「截止」那一行是:
年 ▾ 月 ▾ 日 ▾ 时 ▾ 分 ▾
五个原生 <select>。期望是 AntD 的弹层日历(点一下弹面板选日期时间)。
<select>
entry_popup.js 的 loadPanel():
entry_popup.js
loadPanel()
.then(function (html) { bodyEl().innerHTML = html; runInlineScripts(bodyEl(), html); // ← 这里没有 fbBootAntd() })
首次打开面板走的就是这条路。
我在 task_panel.js 的 paint() 里加过 fbBootAntd()(上一条提交 #74), 但 paint() 只在面板里做了动作之后重画时被调用:
task_panel.js
paint()
fbBootAntd()
act()
⇒ 用户第一眼看到的是从未被升级过的原生下拉。 (如果先点一下「已完成」再点回来,就会看到 AntD 挂上了 —— 这种"时好时坏"最迷惑。)
bootAntd()
function bootAntd(hosts, dateRanges, dates, singles) { if (!hosts.length && !dateRanges.length && !dates.length && !singles.length) { return; }
首页首屏的任务卡里没有 [data-dt-antd-single](那控件只有打开面板后才存在) ⇒ 首屏调用时 singles.length === 0 ⇒ 直接 return ⇒ 什么都没挂。
[data-dt-antd-single]
singles.length === 0
loadPanel() 在插入 HTML 后补两件事:
if (typeof window.fbBootAntd === 'function') { try { window.fbBootAntd(); } catch (e) {} } window.fbTaskPanelBindDue(); // 首次打开也要绑 change 监听,否则选完不保存
同时把 bindDue() 从 task_panel.js 内部暴露成 window.fbTaskPanelBindDue —— 否则 entry_popup.js 调不到(它在另一个 IIFE 里)。
bindDue()
window.fbTaskPanelBindDue
bindDue() 原来只在 paint() 里调。首次打开时不绑定 ⇒ 用户选完截止时间,change 事件没人听,不会保存。 只有"先做一次别的动作触发重画"之后才生效 —— 又是一个"时好时坏"。
change
layout.php:253 entry_popup.js (defer) layout.php:268 task_panel.js (defer)
两者都是 defer,按文档顺序执行 ⇒ task_panel.js 先跑完、注册好 window.fbTaskPanelBindDue,之后 loadPanel() 才在用户点击时被调用。 不存在"调的时候还没定义"的时序问题。
defer
#74 是把只读的截止行改成可编辑控件;本单是那个控件首次打开时没被升级成 AntD(首次走 entry_popup.loadPanel,不经过 task_panel.paint)。同一个功能的下一层缺陷。
No dependencies set.
The note is not visible to the blocked user.
任务面板的截止时间显示成五个原生下拉,不是 AntD 弹层日历
用户(2026-11-05)
「空间」= 「控件」(口误)。经确认:
现象
点开首页任务 → 面板里「截止」那一行是:
五个原生
<select>。期望是 AntD 的弹层日历(点一下弹面板选日期时间)。根因:首次打开面板的那条路没挂 AntD
entry_popup.js的loadPanel():首次打开面板走的就是这条路。
我在
task_panel.js的paint()里加过fbBootAntd()(上一条提交 #74),但
paint()只在面板里做了动作之后重画时被调用:act()→ 回来后paint()paint()⇒ 用户第一眼看到的是从未被升级过的原生下拉。
(如果先点一下「已完成」再点回来,就会看到 AntD 挂上了 —— 这种"时好时坏"最迷惑。)
为什么
bootAntd()首屏扫不到首页首屏的任务卡里没有
[data-dt-antd-single](那控件只有打开面板后才存在)⇒ 首屏调用时
singles.length === 0⇒ 直接 return ⇒ 什么都没挂。修法
loadPanel()在插入 HTML 后补两件事:同时把
bindDue()从task_panel.js内部暴露成window.fbTaskPanelBindDue——否则
entry_popup.js调不到(它在另一个 IIFE 里)。顺带修掉的第二个 bug
bindDue()原来只在paint()里调。首次打开时不绑定⇒ 用户选完截止时间,
change事件没人听,不会保存。只有"先做一次别的动作触发重画"之后才生效 —— 又是一个"时好时坏"。
加载顺序确认
两者都是
defer,按文档顺序执行 ⇒task_panel.js先跑完、注册好window.fbTaskPanelBindDue,之后loadPanel()才在用户点击时被调用。不存在"调的时候还没定义"的时序问题。
验收
为什么单独建单
#74 是把只读的截止行改成可编辑控件;本单是那个控件首次打开时没被升级成 AntD(首次走 entry_popup.loadPanel,不经过 task_panel.paint)。同一个功能的下一层缺陷。