在一个允许客户端之间实时聊天的应用程序中,我旨在集成允许定义在将来的时间点传递的消息的功能。
在下面的示例中,我能够插入直接插入模板中的消息。但是,我只想显示时间小于或等于当前时间的消息,但是一旦达到该时间,就会自动显示具有未来时间点的消息。例如,如果我从控制台插入一条消息Meteor.call("createMessage", 30000, "hello in 30 seconds")
,该消息以后将通过调用显示30秒,则该消息应在30秒后自动显示。
我开始将发布功能中的查询限制为time: {'$lt': new Date()}
。但是,我在使这种反应性方面遇到麻烦。我尝试了Tracker.autorun
和的几种组合,但均未成功cursor.observe
。
谁能给我一个提示,说明我如何在以下运行示例中实现所需的反应性?
1)html文件
<body>
{{> chat}}
</body>
<template name="chat">
{{#each chatMessages}}
{{time}} - {{message}} <br>
{{/each}}
</template>
2)js文件
//server and client
Messages = new Mongo.Collection("messages"); //{time: Sun Nov 02 2014 22:17:32 GMT+0100 (CET), message: "hello"}
//server
if(Meteor.isServer){
Meteor.methods({
'createMessage': function(timeOffset, message){
Messages.insert({
time: new Date(new Date().getTime() + timeOffset),
message: message
});
}
});
Meteor.publish("messages", function(){
return Messages.find({
//time: {'$lt': new Date()}
});
});
}
//client
if (Meteor.isClient) {
Template.chat.helpers({
chatMessages: function(){
return Messages.find({});
}
});
Tracker.autorun(function (){
mySub = Meteor.subscribe('messages');
});
}
如果Date()是反应性数据源,则可以使用,但不能。
您可以在服务器端创建一个计时器来处理它。我看到的最好的设计是id:选择下一条消息的将来日期,并设置具有时间差的Timer,还可以获取下一条消息的时间。当然,这取决于您的应用程序如何工作。
了解有关流星中计时器的更多信息:https : //docs.meteor.com/#/full/timers
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句