【问题标题】:Editable synced sort order可编辑的同步排序顺序
【发布时间】:2018-08-01 10:59:06
【问题描述】:

如何实现 Firestore,以便用户可以对数组中的项目进行排序并同步排序顺序?例如在 Todo 列表中订购项目。

我可以想出 2 个替代方案。但他们觉得这不是好主意..

  1. 在指定索引处插入项目。但我不确定如何使用 Firestore,或者您是否可以使用 Firestore?

  2. 每次添加新项目或“移动”项目时,都会将新的排序键值映射到每个项目,然后更新所有项目。我也许可以用 .batch 做到这一点,但感觉效率超级低?

一定有更好的方法! ????

使用 firebase 实时数据库更容易吗?

【问题讨论】:

    标签: firebase firebase-realtime-database google-cloud-firestore


    【解决方案1】:

    我建议在您的文档中有一个position 字段,您将设置为浮点值。使用按位置排序的查询收听集合。那么:

    1. 当把一个项目放在最后时,给它一个lastItem.position + 100的位置
    2. 移动项目时,将position 设置为(prev.position + next.position) / 2.0
    3. 将项目移动到行首时,firstItem.position / 2.0

    通过这种方式,您可以连续重新排序项目,而无需进行批量写入。我们来看一个例子:

    A: 100                   C:  50                    C:  50
    B: 200                   A: 100 -> move below B    B: 200
    C: 300 -> move to top    B: 200                    A: 300
    D: 400                   D: 400                    D: 400
    

    【讨论】:

    • 这听起来超级聪明!!但我不太明白 2. 在示例中为 (100+200)/2=150?
    • prevnext 指的是新位置的邻居。所以第二个例子采用200 (B) + 400 (D) / 2 = 300
    • 啊,好吧!现在我明白了!
    • 但是我可以除以多少次,直到精确到精确(到小数点),即结果被四舍五入?
    • 很多。如果您对此非常担心,请将您的职位添加1000000 或其他内容,而不是100。或者,通过实际执行批量写入并将它们全部重置为漂亮的整数来定期“清理”位置。
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 2011-04-02
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多