我正在制作一个应用程序,必须列出可以重新排列的内容。
Trello完美地完成它,它允许我们重新排列所有内容,从列表到卡片和清单。它是如何做到的?
我检查了他们在重新排列时发出的API调用,结果发现他们正在发送密钥" pos"从前端。每次我重新安排一张卡时,该卡的ID用于PUT请求并更新" pos"值。
以下是重新排列前的清单:
{
"id": "553750612a364775ded5f841",
"name": "test again",
"closed": false,
"idBoard": "55374f01f73ace7afec03698",
"pos": 131071
}
我将其拖放到其他列表之前,对https://trello.com/1/lists/553750612a364775ded5f841
进行API调用并发送新的pos:32767
。答案如下:
{
"id": "553750612a364775ded5f841",
"name": "test again",
"closed": false,
"idBoard": "55374f01f73ace7afec03698",
"pos": 32767.5
}
Trello是如何做到的?
答案 0 :(得分:8)
每个项目都有一个pos
(一个JavaScript编号,所以双精度浮点数)。然后,通过pos
排序来呈现它们。
添加新项目时,pos
基于列表中的位置:
pos
+缓冲区(我认为1024
已使用)pos
除以2 pos
的平均值中间选项将由客户分配; top / bottom可以由客户端分配,也可以作为字符串"top"
或"bottom"
传递给服务器,在这种情况下,服务器将执行逻辑。
在服务器上,如上所示将pos
分配给新项目后,将检查该项目与其最近邻居的邻接关系 - 如果它们之间的距离小于最小距离(.01
是使用,我相信),它们被分散开来(可能会逐步增加整个列表的pos
。)
我不认为这是理想的方式,但Trello就是这样做的。