Trello如何处理卡片,清单,清单等的重新排列

ket*_*att 5 javascript mongodb trello

我正在制作一个应用程序,必须列出可以重新排列的内容.

Trello完美地完成它,它允许我们重新排列所有内容,从列表到卡片和清单.它是如何做到的?

我检查了他们在重新排列时发出的API调用,结果发现他们正在从前端发送一个键"pos".每次我重新排列卡片时,该卡片的ID用于PUT请求并更新"pos"值.

这是重新排列之前的列表:

{
    "id": "553750612a364775ded5f841",
    "name": "test again",
    "closed": false,
    "idBoard": "55374f01f73ace7afec03698",
    "pos": 131071
}
Run Code Online (Sandbox Code Playgroud)

我将其拖放到其他列表之前,进行API调用https://trello.com/1/lists/553750612a364775ded5f841pos:32767发送新的.回应如下:

{
    "id": "553750612a364775ded5f841",
    "name": "test again",
    "closed": false,
    "idBoard": "55374f01f73ace7afec03698",
    "pos": 32767.5
}
Run Code Online (Sandbox Code Playgroud)

Trello是如何做到的?

Aar*_*our 9

每个项目都有一个pos(一个JavaScript编号,所以双精度浮点数).然后,它们通过排序来呈现pos.

添加新项目时,它pos基于列表中的位置:

  • 列表底部 - pos当前列表中的最大值+缓冲区(我认为1024是使用的)
  • 列表顶部 - 列表中pos当前最小值除以2
  • 列表中间 - pos两个相邻项目的平均值

中间选项将由客户分配; 顶部/底部既可以由客户端分配,也可以作为字符串传递给服务器,"top"或者"bottom"在这种情况下服务器将执行逻辑.

在服务器上,在pos如上所示分配给新项目之后,检查项目与其最近邻居的邻接关系 - 如果它们相距最小距离(.01使用,我相信),它们会被分散(可能是级联的)增加pos整个列表).

我不认为这是理想的方式,但Trello就是这样做的.

  • @Aaron Dufour 理想的方式是什么? (2认同)