E4.11.2panel-main state synchronisation设计研究
面板与主内容的状态同步需明确
别名: 检查器同步 · 双向绑定面板 · 面板过期 · inspector sync
概念解释
非模态让两边同时可改,也就让两边同时可能过期。面板与主内容的同步(panel–main synchronisation)要求:主表面上改了选中对象或它的值,面板立刻显示同一份;面板里改了属性,主表面立刻画成同一份。不同步时,人会按过期的检查器做决策,或按过期的画布理解面板。并行若不同步,还不如关着。
机制
两块可见区域被默认当成同一份世界的两个视角。视角之间一旦延迟或方向单向,世界就裂开:画布上对象已经移到右侧,检查器还写着旧坐标;检查器改了名称,列表里仍是旧名。裂开之后,下一次编辑会写到错误的对象上,或把刚改的值用旧视图覆盖回去。同步必须是双向、按对象身份而不是按面板打开时的快照。选中切换时,面板应整份换成新对象,而不是把上一个对象的脏字段留在表单里。正在输入的字段需要明确的提交点,否则主表面的一次外部更新会把半截输入冲掉——那是同步策略的一部分,不是同步的反面。
怎么研究
在打开的检查器上改一个属性,看主表面出现新值的延迟;在主表面改选中,看检查器是否换对象、是否残留上一条的值。自变量:更新是即时还是失焦提交、是否跨对象残留。因变量:过期读取次数、用旧值覆盖新值的次数、选错对象编辑。用录屏对同一时刻的两边截图,比问「感觉同步吗」更硬。
边界
协作场景下服务器才是真源,两边都可能滞后,同步要标明「正在保存 / 他人已改」而不能假装本地即真理。只读面板可以单向从主表面拉,不必把只读区的点击写回。大文档的昂贵预览可以节流,但节流期间要显示「预览落后于编辑」,否则节流就是沉默的不同步。面板关闭期间不必同步;再打开时应拉当前对象,而不是恢复关闭前的快照。
怎么落地
- 以对象 id 为键:选中变化则面板整表替换;禁止上一条的字段值留在输入框里。
- 主表面改值与面板改值走同一数据源,任一侧提交后另一侧重绘。
- 正在键入的字段用失焦或确认提交,并在外部更新到来时不覆盖未提交的输入,或明确提示将丢失。
- 验证:改面板看主表面,改主表面看面板,再快速换选中。有一处数字对不上,就修同步而不是加「刷新」按钮。