Meteor UX 问题:将项目添加到排序列表后,该项目被添加到顶部然后排序

Meteor UX Issue: After adding item to a sorted list, the item is added to the top and then sorted

我正在使用 Meteor 创建基本聊天。

在我的客户端上:

div.chat-discussion
  each messages
    +chatMessage

帮手是

Messages.find
   conversationId: t.data.conversation._id
,   
   sort:
      createdAt: 1

所以我按照从最旧到最新的顺序对聊天消息进行排序。

聊天内容是这样的

但是每次发消息,都不会直接加到底部

添加到顶部几毫秒,然后移到底部。

这让用户体验感觉有点问题。为什么会发生这种情况,我该如何解决?

更新

我似乎已经通过删除排序并仅返回帮助程序中的消息来解决问题

Messages.find
   conversationId: t.data.conversation._id

所以如果我不在客户端排序,消息会自动添加到消息列表的底部而不会闪烁。我不确定如何或为什么。我想默认情况下它是按最旧的顺序排序的。

除了 FIFO 之外,集合没有默认排序,这意味着只要您不排序,记录就会按写入时的原样发送。

如果您只是不断收到消息,这可能符合您的需要,但有时当您处于同步/离线状态时,您得到的列表可能与按时间排序时不一样。

我猜你在服务器上使用 autopublish

您应该编写自己的服务器 publish 方法和 return 已经从服务器中获取的排序列表。

所以在客户端上,您可以通过 find() 订阅,或者也可以在 mini-mongo 上进行排序(首选)

这应该可以防止用户体验出现问题

干杯

我明白发生了什么事了。

最后的问题是与我使用的排序以及时间戳 (https://atmospherejs.com/zimme/collection-timestampable) 包如何添加 createdAt 字段发生冲突。

我在客户端按 createdAt 字段排序,这是由时间戳包添加的。问题是第一次插入文档时该字段不存在,所以这就是为什么我看到消息附加到列表的顶部并且当 createdAt 字段被立即添加时,然后它跳了下来到排序位置。

为了解决这个问题,我在插入时添加了一个名为 sentAt 的字段,现在也按该字段排序。

这解决了问题。我试图按插入时不存在的字段进行排序。即使该字段是在插入后立即添加的,这也会在 UI 中显示。