如何在给定Mongo游标的情况下有效地访问上一个(或下一个)记录

时间:2014-12-08 16:04:04

标签: meteor

我有一个聊天应用程序。消息存储在Mongo集合中,其中包含以下字段:

# Messages
#   body: string
#   nick: string
#   room_name: string
#   timestamp: timestamp

当我渲染聊天室时,如果消息跟随同一用户的消息,我想对消息应用特殊样式。但是如果我使用标准模板迭代器(这是CoffeeScript):

Template.messages.helpers
    messages: -> model.Messages.find()
    isFollowUp: -> /* some code here? */ false

在模板中(简化):

{{#each messages}}<p class-"{{isFollowUp}}">{{nick}}: {{body}}</p>{{/each}}

然后在isFollowUp帮助器中,我可以访问当前消息,但不能访问上一条消息。理想情况下,我可以做类似的事情:

isFollowUp: -> if this.nick == this.previous().nick then "followup" else ""

重要:页面上有很多消息,每次新消息到达时我都无法重新呈现整个页面。有一个简单的解决方案,如:

messages: -> model.Messages.find().fetch().map (v,i,a) ->
  prev: a[i-1]
  curr: v
  next: a[i+1]

但这会消除Blaze中的特殊{{#each}}依赖(通过将数组而不是Cursor传递给模板),因此每当有新消息到达时都会强制重新呈现整个页面。

我正在寻找的解决方案必须避免重新发送所有消息。当新消息到达时,只应重新呈现该消息及其前面的消息。

0 个答案:

没有答案