Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor 具有计算性质的反应性流星模板_Meteor - Fatal编程技术网

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
属性,则需要与服务器时间同步,因为您不能假定所有客户端都有准确的时钟

为此(跟踪用户联机状态),您还可以查看包