【问题标题】:Meteor UX Issue: After adding item to a sorted list, the item is added to the top and then sortedMeteor UX 问题:将项目添加到排序列表后,项目被添加到顶部然后排序
【发布时间】:2015-10-03 05:50:58
【问题描述】:

我正在创建一个与 Meteor 的基本聊天。

在我做的客户端上:

div.chat-discussion
  each messages
    +chatMessage

助手是

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

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

聊天是这样的

但是每当我发送消息时,它都不会直接添加到底部。

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

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

更新

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

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

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

【问题讨论】:

  • 有趣的问题。您的解决方案最好作为答案发布,但在浏览器之间可能不一致。你能创建一个 MeteorPad 来展示这个吗?
  • 你如何在对话项上设置 created at 值?

标签: meteor meteor-blaze


【解决方案1】:

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

如果您只是不断收到消息,这可能会满足您的需求,但是当您有时处于同步/离线情况时,您可能会得到与时间排序时不同的列表。

我猜你在服务器上使用autopublish

您应该编写自己的服务器 publish 方法并从服务器返回已排序的列表。

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

这应该可以防止出现故障的用户体验

干杯

【讨论】:

  • 嗨,汤姆,感谢您的回答。我没有使用自动发布。我实际上想通了,并将发布我的答案。
  • 嗨@nearpoint,你没有写到你使用了自己的发布方法,也没有使用那个时间戳包。我真的可能不相信您需要额外的 sentAt 字段。您是否已将您的收藏保存到 /lib ?通常该字段应该已经在 miniMongo 端设置。
【解决方案2】:

我知道发生了什么。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2021-08-01
    相关资源
    最近更新 更多