E3.14.3transfer list order after move设计
移动后的顺序是否保留需要明确定义
别名: 穿梭顺序 · preserve order · 加入后排序
概念解释
对象从左列搬到右列(或搬回)之后,它出现在什么位置,必须是一条说得清的规则,而不是每次看起来都不一样。常见规则有:保持源集合的排序、追加到目标列末尾、按字母重排、或允许在目标列里手动排序。顺序是否保留(order after move)直接影响「导出字段的列序」「权限显示的优先级」这类已经把顺序当成数据的任务。规则不明,用户会反复搬进搬出,试图用搬动当排序工具,结果把集合搞乱。
顺序是目标列的属性。源列也可以有自己的排序,两边不必相同,但各自要稳定。
机制
人把名单位置读成重要性或执行序。搬到右侧末尾会被理解成「最后处理」,插回源位置会被理解成「还我原来的名次」。若有时按字母插入、有时追加,同一动作的空间结果不可预测,穿梭的移交隐喻就被排序隐喻污染。一旦用户开始用搬动去排顺序,加入/移出不再是集合运算,而成了不稳定的排序手势,错误会以错序而不是错成员的形式出现——更难被发现。
若产品其实需要目标列可排序,应在右列提供上移/下移或拖拽,把排序从搬动里拆出来。搬动只改变成员,排序只改变位置。
边界
集合无序(无标签的 ID 集合、纯权限开关)时,仍应选一种稳定规则(通常按名称排),避免表面随机。用户手动排过序之后,再按字母自动重排会毁掉劳动,自动规则只应在「尚未手动排」时运行。过滤状态下的搬动:对象应进入目标列的完整顺序位置,而不是进入当前过滤视图的末尾,否则取消过滤后位置会跳。源列若在搬出后把空洞留下(不把后面的项上移),会像损坏的列表;多数情况应合拢,除非位置本身编码着未选集合的某种序。
怎么落地
- 写明目标列顺序:追加、跟随源序、按名称、或手动。把这句话放在列的辅助说明里。
- 需要列序当数据时,在右列提供独立的排序手柄,不要让用户靠搬进搬出碰运气。
- 过滤中搬动按完整名单的规则落位,取消过滤后位置不变。
- 验证:按不同顺序挑三项搬过去,再搬回来。位置每次符合同一条规则;用户若开始靠搬动来「排一下」,就缺了排序入口或规则没被读到。