javascript - meteor ,Javascript : Clean up or iterator only 10 of history

标签 javascript jquery meteor

我不断在窗口上添加消息,但我只想显示最后 10 条消息。我该怎么做?在 jQuery 中,我可以只使用追加和删除到列表中,但在 Meteor 中我有类似的东西。

在 html 中

<template name="messages">
    {{#each messages}}
       <strong>{{name}}</strong> : {{message}}<br>
    {{/each}}
</template>

我正在循环显示消息,这使我的应用程序显示所有消息。那么我如何选择唯一的10个,而不是循环遍历整个。谢谢!

 Template.messages.messages = function () {
     return Messages.find({}, { sort: { time: -1 }});
 }

 Template.input_box.events = {
     "keydown input#message" : function(event){
         if (event.which == 13) { 
        if (Meteor.user())
        {
            var name = Meteor.user().profile.name;
        }
        else
        {
            var name = "Anonymous";
        }

        var message = document.getElementById("message");

        var thetime = new Date();
        var time_string = "time "+thetime.getHours();
        if (message.value != "") {
            Messages.insert({
                name: name,
                message: message.value,
                time: time_string,
            });

            document.getElementById("message").value = "";
            message.value = "";
        }
    }
   }

}

最佳答案

如果您不打算显示这些消息,我会更进一步,将它们完全从客户端的 minimongo 中删除。否则它只会填满您不使用的缓存并污染合并框。以下发布将使除最后 10 条之外的所有消息在客户端上自动消失:

Meteor.publish("messages", function() {
    return Messages.find({}, {
        sort: { time: -1 },
        limit: 10
    });
});

一些注意事项:

  • 您应该在服务器上计算时间戳,因为客户端时间戳不可靠,并且消息不一定按发送顺序显示。添加deny hook或使用collection-hooks .
  • 您可能需要在客户端上再次对消息进行排序,按照时间戳的升序排列,除非您以最新的方式显示消息。
  • 确保您的 Mongo 集合上有适当的索引(尤其是在时间字段上),以便服务器可以有效地跟踪最后 10 条消息。

    Messages._ensureIndex({time: 1});
    

    加上您正在使用的任何其他字段。咨询http://docs.mongodb.org/manual/core/indexes/如果您使用复合索引,以便正确排序。

关于javascript - meteor ,Javascript : Clean up or iterator only 10 of history,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18900008/

相关文章:

jquery - 如何使用 jquery 将表数据添加到最后一个表数据列之前

jquery - 对于这个复杂的例子,如何 "think in React"?

javascript - Backbone.Model.extend 不创建实例属性

javascript - 使用 Ctrl+click 和 Shift+click 选择多个 HTML 表格行

javascript - 同步代码中不会发生更改检测

javascript - 当按下按钮进入输入时获取表格 div 内容

javascript - 响应显示/隐藏菜单故障

javascript - 如何通过id从同一父级获取元素

meteor - 所有模板的事件处理程序?

javascript - 如何使用 Meteor Slideout 包