Meteor 具有计算性质的反应性流星模板
我正在尝试实现一个类,该类在用户“联机”时显示。我有一个模板帮助器,它使用用户的Meteor 具有计算性质的反应性流星模板,meteor,Meteor,我正在尝试实现一个类,该类在用户“联机”时显示。我有一个模板帮助器,它使用用户的lastSeenAtdate属性: Template.user.isOnline = function() { timeSinceOnline = (new Date()).getTime() - this.lastSeenAt.getTime() if (timeSinceOnline > 2000) { return ''; } else { return
lastSeenAt
date属性:
Template.user.isOnline = function() {
timeSinceOnline = (new Date()).getTime() - this.lastSeenAt.getTime()
if (timeSinceOnline > 2000) {
return '';
} else {
return 'is-online';
}
};
当用户打开应用程序时,“最后一次在”属性会不断更新。
此问题是,此帮助程序仅在lastSeenAt属性更改时更新模板。因此,当用户在线时,它就起作用了,但现在当用户离线时,它就起作用了。是否需要重新计算,还是必须手动设置某种“脱机”属性才能使其正常工作?听起来您需要一个反应式日期数据源。一些反应性变量,报告当前日期和时间,并每秒更新一次,导致重新计算 其中一种方法是将其放在会话变量中:
Session.set("currentDate", new Date);
setInterval(function () { Session.set("currentDate", new Date); }, 1000);
然后在代码中使用它:
Template.user.isOnline = function() {
timeSinceOnline = Session.get("currentDate").getTime() - this.lastSeenAt.getTime()
if (timeSinceOnline > 2000) {
return '';
} else {
return 'is-online';
}
};
如果效率太低,您可以稍后提出类似的解决方案,包括Deps.dependency
。您可以查看该包。它提供了当前时间的反应数据源,该数据源也与服务器时间同步。如果服务器或其他用户设置了lastSeenAt
属性,则需要与服务器时间同步,因为您不能假定所有客户端都有准确的时钟
为此(跟踪用户联机状态),您还可以查看包