Meteor,Javascript:清理或迭代只有10个历史

时间:2013-09-19 16:18:24

标签: javascript jquery meteor

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

in 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 = "";
        }
    }
   }

}

1 个答案:

答案 0 :(得分:1)

如果您不打算显示消息,我会更进一步将它们从客户端的minimongo中完全取出。否则它只会填满您未使用的缓存并污染合并框。以下出版物将使所有消息,但最后10个消息自动消失在客户端上:

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

一些注意事项:

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

    Messages._ensureIndex({time: 1});
    

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