在允許客戶端實時聊天的應用程序中,我的目標是集成允許定義未來時間點消息的功能。取決於流星當前時間的反應性訂閱
在以下示例中,我可以插入直接插入模板中的消息。但是,我只想顯示時間小於或等於當前時間的消息,但只要達到時間,就會自動顯示具有未來時間點的消息。例如,如果我通過調用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(),那麼查詢的結果不可能被反應?目前,我在Tracker.autorun的Messages集合上有一個計數器。這很好,但每當我的查詢涉及date()(例如只計算小於當前日期的文檔)時,它就不起作用。這是因爲如果我理解正確,date()本身沒有反應? – Miriam 2014-11-03 12:17:38
是的。請記住,日期方法可能會損害您的服務器性能,我建議您找到更好的方法。如果你的消息非常接近,及時,彼此的結果是:一批數據庫查詢和定時器觸發。考慮在你的應用程序中做一些緩存。一些流星開發商不能停止思考被動,但有時添加標誌{reactive:false}在某些情況下沒有任何區別。如何獲取下一個50條消息以獲取緩存,以及何時獲取數據庫爲空? – 2014-11-03 12:43:33