我一直在窗口上添加消息,但我想只显示最后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 = "";
}
}
}
}
答案 0 :(得分:1)
如果您不打算显示消息,我会更进一步将它们从客户端的minimongo中完全取出。否则它只会填满您未使用的缓存并污染合并框。以下出版物将使所有消息,但最后10个消息自动消失在客户端上:
Meteor.publish("messages", function() {
return Messages.find({}, {
sort: { time: -1 },
limit: 10
});
});
一些注意事项:
确保您的Mongo集合上有适当的索引(特别是在time
字段上),以便服务器可以有效地跟踪最近10条消息。
Messages._ensureIndex({time: 1});
以及您正在使用的其他任何字段。如果您使用复合索引,请咨询http://docs.mongodb.org/manual/core/indexes/以获得正确的排序。