如何从'Meteor startup'中有效地更新变量的值

时间:2015-09-01 04:17:46

标签: javascript meteor reactive-programming

我正在尝试为我正在处理的项目添加一些常规应用程序配置,我决定将其保存在数据库中,以便我可以在其他地方更改它们,如果应用程序出现问题,主要原因我这样做是为了添加一个维护模式'每当我对应用程序进行更改或在部署期间或类似的情况下,我尝试这样做的方式是使用此代码设置的变量:

 Meteor.startup(function() {
  Tracker.autorun(function () {
    Meteor.subscribe('configuracion', function(){
      configuracionGeneral = Configuracion.findOne({});
    })
  });
});

然而,当我尝试像铁路由器一样使用它时:

Router.onBeforeAction(function () {
  console.log(configuracionGeneral);
  if(configuracionGeneral.vynoHabilitado=='habilitado'){
    this.next();
  }else{
    //Send to maintenance template
  }
});

我可以使用变量configuracionGeneral而没有问题,我在控制台上看到它,但是当我在数据库中更改它的值时,变量不会被动反应,所以我我想知道怎样才能更改这个变量'被动地'。

1 个答案:

答案 0 :(得分:2)

我认为问题在于according to the docs

  

如果run函数的下一次迭代订阅相同的   记录集(相同的名称和参数),Meteor足够聪明,可以跳过   浪费的取消订阅/重新订阅。

因此,您的订阅不会重新运行,并且不会触发您的回调。您可以尝试使用David Weldon的common mistakes

这种方法
Meteor.startup(function() {
  var handle = Meteor.subscribe('configuracion');
  Tracker.autorun(function () {
    if (handle.ready())
      configuracionGeneral = Configuracion.findOne();
  });
});