任务面板首次打开时截止控件没升级成 AntD (#75)
用户:「空间有了,但是不是我想要的空间,这个空间需要换。」 经确认「空间」=「控件」,现象是五个原生下拉(年/月/日/时/分), 期望 AntD 弹层日历。 真根因:首次打开面板走 entry_popup.js 的 loadPanel(), 它只 innerHTML + runInlineScripts,**没有补挂 AntD**。 上一条 #74 我在 task_panel.js 的 paint() 里加了 fbBootAntd(), 但 paint() 只在"面板里做了动作之后重画"时才跑 (点状态/挪看板/加子任务/发评论/传附件 → act() → 回来 paint())。 **首次打开不经过 paint()** ⇒ 用户第一眼看到的是从未升级过的原生下拉。 (先点一下「已完成」再点回来就会看到 AntD 挂上了 —— 这种"时好时坏"最迷惑。) 为什么 bootAntd 首屏也没兜住: if (!hosts.length && !dateRanges.length && !dates.length && !singles.length) return; 首页首屏任务卡里没有 [data-dt-antd-single](那控件要打开面板才有) ⇒ 首屏调用时直接 return。 修法: ① entry_popup.js loadPanel():插入 HTML 后调 fbBootAntd() ② 顺带修第二个 bug:bindDue() 原来也只在 paint() 里调, 首次打开不绑定 ⇒ 选完截止时间 change 没人听 ⇒ **不会保存**。 ⇒ 把 bindDue 暴露成 window.fbTaskPanelBindDue,loadPanel 显式调一次。 加载顺序已确认:两者都是 defer,entry_popup.js(253) 在前、 task_panel.js(268) 在后 ⇒ task_panel 先执行完并注册好 window.fbTaskPanelBindDue,之后 loadPanel 才在用户点击时调用。 不存在"调的时候还没定义"。 antd 样式确认:vendor 目录只有 reset.css(antd 5 是 CSS-in-JS 运行时注入), 不存在"缺样式导致看起来像原生下拉"的可能。
This commit is contained in:
@@ -208,6 +208,28 @@
|
|||||||
if (!bodyEl() || html.indexOf('data-tk-panel') < 0) { throw new Error('panel'); }
|
if (!bodyEl() || html.indexOf('data-tk-panel') < 0) { throw new Error('panel'); }
|
||||||
bodyEl().innerHTML = html;
|
bodyEl().innerHTML = html;
|
||||||
runInlineScripts(bodyEl(), html);
|
runInlineScripts(bodyEl(), html);
|
||||||
|
/* 🔴🔴 #74(用户 2026-11-05):「空间有了,但是不是我想要的空间,这个空间需要换。」
|
||||||
|
—— 实为「控件」:面板里的截止时间显示成**五个原生下拉**(年/月/日/时/分),
|
||||||
|
而不是 AntD 的弹层日历。
|
||||||
|
|
||||||
|
真根因:**首次打开面板走的是这条 loadPanel()**,它只 innerHTML + 跑内联脚本,
|
||||||
|
**没有补挂 AntD**。
|
||||||
|
我在 task_panel.js 的 paint() 里加过 fbBootAntd(),但那只管
|
||||||
|
"面板里做了动作之后的重画"——**首次打开不经过 paint()**。
|
||||||
|
⇒ 用户点开任务看到的是从未被升级过的原生下拉。
|
||||||
|
|
||||||
|
⚠️ 与上面 loadEdit() 里那次调用同一个理由:AJAX 换进来的 HTML
|
||||||
|
不会自己跑初始化;bootAntd() 只在页面加载时扫过一次
|
||||||
|
[data-dt-antd-single],那时面板还不存在。
|
||||||
|
⚠️ 放在 runInlineScripts 之后:内联脚本里可能也有初始化逻辑,
|
||||||
|
让它先跑完;mountAntd* 有 data-antd-done 幂等标记,重复调用无害。 */
|
||||||
|
if (typeof window.fbBootAntd === 'function') {
|
||||||
|
try { window.fbBootAntd(); } catch (e) { /* 挂不上就留在原生下拉,不阻断面板 */ }
|
||||||
|
}
|
||||||
|
/* 截止控件的 change 监听(#74):首次打开也要绑,否则选完时间不会保存 */
|
||||||
|
if (typeof window.fbTaskPanelBindDue === 'function') {
|
||||||
|
try { window.fbTaskPanelBindDue(); } catch (e) { /* 忽略 */ }
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.catch(function () {
|
.catch(function () {
|
||||||
if (!bodyEl()) { return; }
|
if (!bodyEl()) { return; }
|
||||||
|
|||||||
@@ -405,4 +405,16 @@
|
|||||||
}
|
}
|
||||||
step();
|
step();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对外暴露「给截止控件绑 change 监听」(#74)。
|
||||||
|
*
|
||||||
|
* 为什么需要:首次打开面板走的是 `entry_popup.js` 的 `loadPanel()`,
|
||||||
|
* 那条路只 innerHTML、不经过本文件的 `paint()` ⇒ `bindDue()` 不会自动跑
|
||||||
|
* ⇒ 用户选完截止时间不会保存(只有做过一次别的动作、触发过一次重画才会生效)。
|
||||||
|
* `loadPanel()` 在插入 HTML 后显式调这个。
|
||||||
|
*
|
||||||
|
* ⚠️ 内部有 `data-fb-due-bound` 幂等标记,重复调用不会重复绑。
|
||||||
|
*/
|
||||||
|
window.fbTaskPanelBindDue = bindDue;
|
||||||
})();
|
})();
|
||||||
|
|||||||
Reference in New Issue
Block a user