2015-09-01 3 views
0

Я пытаюсь добавить некоторую общую конфигурацию приложения для проекта, над которым я работаю, и я решил сохранить его в базе данных, чтобы я мог их изменить из другого если в приложении все пойдет не так, основная причина, по которой я это делаю, - добавить «режим обслуживания», когда я вношу изменения в приложение или во время развертывания или что-то в этом роде, как я пытаюсь это сделать переменная я установил с этим кодом:Как обновить значение переменной от «Meteor startup»

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 без проблем, и я вижу ее на консоли, но когда я изменяю ее значения в базе данных, переменная не изменяется «реактивно», поэтому я хотел бы знать, как я могу изменить эта переменная «реактивно».

ответ

2

Я думаю, что проблема связана с тем, что, according to the docs:

если следующая итерация вашей функции запуска выписывает к тому же набора записей (такое же имя и параметры), Метеор достаточно умны, чтобы пропустить расточительная отписка/рассылка.

Таким образом, ваша подписка не перезапускается, и ваш обратный вызов не запускается. Вы можете попробовать использовать этот метод у Дэвида Уэлдона common mistakes:

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