【问题标题】:Sortable list with GoAngularGoAngular 的可排序列表
【发布时间】:2014-05-06 23:47:42
【问题描述】:

所以我正在创建一个项目,人们可以在其中一起完成任务列表。我目前的同步方法很糟糕,所以我一直想转移到 GoInstant 一段时间。当我环顾四周时,我发现了 GoAngular,它似乎提供了一种非常贴心、直观的方式来将数据和显示绑定在一起。但是我不知道 GoAngular 是否能胜任处理多人同时添加删除和重新排序项目的任务。

你知道让 GoAngular 支持重新排序的方法吗?重要的是更新是增量的,而不是每次都重新创建整个列表的 DOM。

【问题讨论】:

    标签: javascript angularjs jquery-ui-sortable goinstant goangular


    【解决方案1】:

    这实际上取决于您的列表的大小,您可以采用两种方法(都不完美),都涉及向您的 GoAngular 模型添加 position 属性(或创建专门用于跟踪位置的模型):

    让我们以此为出发点:

    [
     { title: 'Item A', position: 1 },
     { title: 'Item B', position: 2 },
     { title: 'Item C', position: 3 },
     { title: 'Item D', position: 4 },
    ]
    

    如果列表很小(数百个项目),您可以在位置变化时更新位置,因此如果“项目 B”在“项目 C”之后移动,您将更新位置(使用 $set) B & C 项:

    [
     { title: 'Item A', position: 1 },
     { title: 'Item C', position: 2 },
     { title: 'Item B', position: 3 },
     { title: 'Item D', position: 4 },
    ]
    

    或者,您可以在两个位置的中间插入一个项目,这在大型列表中更实用。如果在“项目 C”之后再次移动“项目 B”,您将只更新“项目 B”的位置。在本例中为 (3+4) / 2 = 3.5:

    [
     { title: 'Item A', position: 1 },
     { title: 'Item C', position: 3 },
     { title: 'Item B', position: 3.5 },
     { title: 'Item D', position: 4 },
    ]
    

    这有帮助吗?

    【讨论】:

    • 这真是太聪明了。我从来没有想过用第二种方式来做
    • 它应该可以解决问题,这不是运营转型,而是一个开始 :)
    • 所以我遇到了这个问题。如果人 1 在 B 和 C 之间移动 A,那么它的位置是 2.5。如果同时人 2 在 B 和 C 之间移动 D,它也被赋予位置 2.5。一旦列表同步,如果有人在 A 和 D 之间放置了一个项目,算法就无法表示。
    • 我想出了一个解决方案,但它不是很优雅。既然你似乎很擅长这个,我想我会问你是否知道更好的方法。
    • 如果位置非常重要,您可以使用单独的键锁定特定列表(使用overwrite: false)。所以基本上......用户A说......希望编辑ID为x的列表。如果失败,他会获取列表的新状态,然后重复。一旦用户 X 获得了锁(成功设置了我们的锁键的值),我们就会更新位置。
    猜你喜欢
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 2011-04-23
    • 2010-10-11
    • 1970-01-01
    相关资源
    最近更新 更多