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 中显示。
我正在使用 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 中显示。