Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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,我正在写一个小应用程序,显示网站的实时点击率。我将点击显示为一个表,并将每个点击传递给模板助手,以确定行的类。这个想法是,随着时间的推移,点击将改变颜色,以表明他们的年龄 所有内容都正确呈现,但我需要刷新页面,以查看助手返回的类随时间的变化。如何使助手以反应方式工作 我怀疑,因为集合对象的数据没有改变,这就是为什么我需要使用会话对象的原因 路由器: Router.route('/tracked-data', { name: 'tracked.data' }); 控制器: TrackedDa

我正在写一个小应用程序,显示网站的实时点击率。我将点击显示为一个表,并将每个点击传递给模板助手,以确定行的类。这个想法是,随着时间的推移,点击将改变颜色,以表明他们的年龄

所有内容都正确呈现,但我需要刷新页面,以查看助手返回的类随时间的变化。如何使助手以反应方式工作

我怀疑,因为集合对象的数据没有改变,这就是为什么我需要使用会话对象的原因

路由器:

Router.route('/tracked-data', {
  name: 'tracked.data'
});
控制器:

TrackedDataController = RouteController.extend({

  data: function () {
    return {
      hits: Hits.find({}, {sort: {createdAt: -1}})
    };
  }
});
模板:

{{#each hits}}
  <tr class="{{ getClass this }}">{{> hit}}</tr>
{{/each}}

虽然我不确定这是一种“正确”的方式,但我还是设法让它起作用。我创建了一个每秒调用一次的函数来更新包含当前时间的
Session
键。然后,在我的助手中,我可以为我要添加类的每个对象创建一个新的
会话
键。此会话密钥基于
session.get('currentTime')
中的值,因此每秒更新一次<代码>会话是被动的,因此一旦时间比较条件更改值,模板就会更新

var updateTime=function(){
var time=Date.now();
Session.set('currentTime',time);
setTimeout(updateTime,1*1000);//1秒
};
updateTime();
Template.trackedData.helpers({
getClass:函数(hit){
var tenMinutesAgo=Session.get('currentTime')-10*1000,
sessionName=“class_u”+hit.\u id,
类名;
className=(hit.createdAt.getTime()>10分钟前)?“成功”:“错误”;
Session.set(sessionName,className);
返回Session.get(sessionName);
}
});
使现代化 谢谢你的评论。我最终得到的解决方案是:

客户端/utils.js

Template.trackedData.helpers({
  getClass: function() {
    if (this.createdAt.getTime() > Utils.secondsAgo(2)) {
      return 'success';
    } else if (this.createdAt.getTime() > Utils.secondsAgo(4)) {
      return 'warning';
    } else {
      return 'error';
    }
  }
});
//请注意,`Session`仅在客户端可用,因此这是一个仅限客户端的实用程序。
Utils=(函数(导出){
返回{
updateTime:函数(){
//Date.getTime()返回毫秒
set('currentTime',Date.now());
setTimeout(Utils.updateTime,1*1000);//1秒
},
secondsAgo:功能(秒){
var毫秒=秒*1000;//毫秒=>s
return Session.get('currentTime')-毫秒;
},
};
})(本条);
Utils.updateTime();
client/templates/hits/hit_list.js

Template.trackedData.helpers({
  getClass: function() {
    if (this.createdAt.getTime() > Utils.secondsAgo(2)) {
      return 'success';
    } else if (this.createdAt.getTime() > Utils.secondsAgo(4)) {
      return 'warning';
    } else {
      return 'error';
    }
  }
});

有谁能建议一个更好的方法吗?谢谢尽管不需要在助手中设置任何会话,但您的解决方案是可行的。请看。我没有使用它,但不久前看到了它的答案-日期不是被动的,因此您的助手也不会被动,请尝试使用强制将实际日期重写为某个变量(可能是会话),然后使用它