Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.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
Javascript 订阅反应性,无需用户输入,且出版物中的时间范围不断变化_Javascript_Meteor_Publish Subscribe - Fatal编程技术网

Javascript 订阅反应性,无需用户输入,且出版物中的时间范围不断变化

Javascript 订阅反应性,无需用户输入,且出版物中的时间范围不断变化,javascript,meteor,publish-subscribe,Javascript,Meteor,Publish Subscribe,我对流星世界有点陌生,试图掌握它的窍门,但却被什么东西卡住了 我希望在没有用户交互的页面上显示呼叫集合的子集(将其视为火车站的到达或离开板) 我有一个出版物,其中包含一个时间段的调用子集 Meteor.publish('currentcalls', function(){ var start = moment().subtract(24, 'hours').toDate(); var end = moment().add(24, 'hours').toDate(); retur

我对流星世界有点陌生,试图掌握它的窍门,但却被什么东西卡住了

我希望在没有用户交互的页面上显示呼叫集合的子集(将其视为火车站的到达或离开板)

我有一个出版物,其中包含一个时间段的调用子集

Meteor.publish('currentcalls', function(){
   var start = moment().subtract(24, 'hours').toDate();
   var end = moment().add(24, 'hours').toDate();
   return Calls.find({appointment: {$gte: start, $lt: end}});
});
我使用模板上的自动运行进行模板订阅

Template.HomeLayout.onCreated( function() {
   this.autorun(() => {
      this.subscribe('currentcalls');
   });
});
当我在设置的时间范围-24小时和+24小时内将呼叫输入数据库时,该呼叫将显示在模板上。当我删除一个时,它将从显示中删除

但是,如果向数据库中添加了日期为将来且不在出版物中设置的时间范围内的调用,则不会在时间推移时自动显示该调用,除非存在导致订阅/出版物与用户交互反应的触发器

有什么好的方法可以确保最终进入或离开不断变化的时间范围的呼叫被显示或从显示中删除

我尝试重新发布发布,但服务器上的控制台日志中出现错误:

I20160730-11:47:03.521(0)? Ignoring duplicate publish named 'currentcalls'
现在,我有一个快速和肮脏的页面重新加载

Meteor.setInterval( function() {
   window.location.reload();
}, 60000);
但我确信那不是流星的方式!;-)
任何意见都将不胜感激

为我自己的问题带来一个可能的解决方案,即我在不断搜索中发现了什么,并帮助将来面临同样问题的人:

我在以下位置找到了解决方案:

在我的问题设置中,它就像一个魅力。然而,我仍然很好奇,在使用流星内部的反应性来解决我提出的问题时,是否还有其他的解决方案或思维方式

编辑: 下面是一些使用该库/包完成我的答案的代码

var start = new ReactiveVar(moment().subtract(24, 'hours').toDate());
var end = new ReactiveVar(moment().add(24, 'hours').toDate());

Meteor.setInterval( function() {
   start.set(moment().subtract(24, 'hours').toDate());
   end.set(moment().add(24, 'hours').toDate());
}, 60000);

Meteor.publish('currentcalls', function() {
   this.autorun(function (computation) {
      return Calls.find({appointment: {$gte: start.get(), $lt: end.get()}});
   });
});

为我自己的问题提供一个可能的解决方案,即我在持续搜索中发现了什么,并帮助将来面临同样问题的人:

我在以下位置找到了解决方案:

在我的问题设置中,它就像一个魅力。然而,我仍然很好奇,在使用流星内部的反应性来解决我提出的问题时,是否还有其他的解决方案或思维方式

编辑: 下面是一些使用该库/包完成我的答案的代码

var start = new ReactiveVar(moment().subtract(24, 'hours').toDate());
var end = new ReactiveVar(moment().add(24, 'hours').toDate());

Meteor.setInterval( function() {
   start.set(moment().subtract(24, 'hours').toDate());
   end.set(moment().add(24, 'hours').toDate());
}, 60000);

Meteor.publish('currentcalls', function() {
   this.autorun(function (computation) {
      return Calls.find({appointment: {$gte: start.get(), $lt: end.get()}});
   });
});