我不断在窗口上添加消息,但我只想显示最后 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/