【发布时间】:2016-08-30 11:45:38
【问题描述】:
我正在构建一个聊天应用程序,并尝试识别状态架构以指示未读消息。
我的状态当前包含消息列表。在渲染时,我按对话对它们进行分组,这样我就可以渲染收件人列表,并为选定的收件人渲染消息。
最简单的方法是将{recipient: lastReadTimestamp} 的lastRead 哈希也存储在状态中。在渲染时,计算每个会话中时间戳大于存储的lastRead 时间戳的消息数量,以获取未读消息的数量。选择收件人后,将该收件人的lastRead 时间戳设置为最新消息的时间戳。
这样做的问题是,当您离开时,如果有 15 条以上的消息进入 - 以至于有些消息超出了视口,您必须滚动才能看到它们。一旦您选择了该收件人,它会将lastRead 时间戳标记为最新消息,基本上将整个对话标记为“已读”,即使上面还有尚未看到的消息。
相反,我希望拥有更像 Slack 的功能。 in-view 或 InteractionObserver 可以检测到消息何时实际进入视口。
但是我会在该州存储什么?每条未读消息的ID?如果是这样,当我刷新并且我的应用程序收到所有消息时,它如何知道其中任何一条已被读取?我可以存储每个 read 消息的 id,但这听起来很笨拙。
有没有人看到一个好的设计模式?
【问题讨论】:
-
使用活动流怎么样?和自定义字段,viewed = true:false ?阅读更多关于它的信息activitystrea.ms
-
感谢@LukaKrajnc,但 couchdb 正在通知客户有关新消息的信息,并且运行良好。不确定 Activity Stream 可以添加哪些关于持久客户端特定“读取”状态的内容?
标签: javascript design-patterns chat slack