js排序后的状态如何在后端保存

排序后的状态如何在后端保存

这里只是介绍下常规的存储解决方案.很多前端都支持排序,如可拖动的,如排序的表格等.前端有很多组件如Jquery插件等,这里不介绍怎么使用了.
js排序后的状态如何在后端保存_第1张图片
如上图,通常来说数据结构为:

[
   {id:1 ,name:"task1" },
   {id:2 ,name:"task2" },
   {id:3 ,name:"task3" },
]

(交换1和3)排序以后可能变为:

[
   {id:3 ,name:"task3" },
   {id:2 ,name:"task2" },
   {id:1 ,name:"task1" },
]

注:(交换1和3需要拖动2次哦)
这里分2种情况,
第1种是直接保存所有排序结果
第2种是分步保存排序结果

方案一: 一次性保存排序结果

适合小表.
假设后端数据库原先是这样保存的:

ID Name
3 task3
2 task2
1 task1

添加一个字段就可以实现有序态

ID Name Order
3 task3 1
2 task2 2
1 task1 3

Order字段需要前端js自动处理好发送到端.
后果: 这样做的话,每次排序后端都要改所有行! 没错,所有相关行,
如果是大表,如有几千行的数据肯定不应该这样做排序.

方案二:分步保存排序结果

适合:需要手动排序表
可拖动的列表最好使用分步保存排序.
这需要在后端加2个字段

ID Name Before after
3 task3 2 null
2 task2 1 3
1 task1 null 2

每次拖动都把拖动的一行结果发给后端

方案三:大表的排序保存

大表的排序应该单独加一个排序状态表.这适合表格排序后保存状态.

ID Name SortTypeId
3 task3 1
2 task2 1
1 task1 1

这里指定排序类型的ID

SortTypeID SortValue desc
1 3,2,1 张三的排序
2 1,4,5,6,7,100,200 省份排序

前端每次把排序的结果发送给后端就O了.
很显然这不适合超大表.

对比

排序状态保存的方案还有很多,多注意跟前后端耦合.不管什么方案前后端新增的工作量都很大.
分步保存对后端最友好,后端压力最小(多用户操作)
小表一次性保存对前后端都友好(主要是取数据后分析数据方便,不适合多用户)
大表一次性保存对前后端都不友好,因为要解析”3,2,1”这类字符串.
如果不是滋滋必较用大表方案就行了.
有现成的框架么?

你可能感兴趣的:(知识库管理系统)