2015-07-17 9 views
0

В Магистраль, если вы хотите поговорить между моделями, вы обычно делаете это через события. Например, если sayHi() следует сделать в модели Friend, а не в модели Stranger, вы должны сделать следующее.Преобразование из базовых привычек в Метеор: события триггеров

внутри Незнакомка

Friend.trigger("callSayHi"); 

внутри друзей

this.listenTo("callSayHi", function() { 
    sayHi(); 
} 

Я хотел сделать то же самое в Метеоре, и я думал, что с помощью Session вар установлены.

внутри Незнакомка

Session.set("callSayHi", true); 

внутри друзей

if (Session.get("callSayHi") { 
    sayHi(); 
} 
// Session.set("callSayHi", false); <-- PROBLEM 

Оставим на проблему определения объема (с помощью ReactiveVar лучше, и т.д.) здесь. Проблема в том, что для более адекватной обработки этой ситуации мне пришлось бы снова установить сеанс var в конец false, но это вызвало бы бесконечное событие sayHi(). Я чувствую, что такая ситуация очень распространена. Что такое метод Метеор?

может быть связано: https://forums.meteor.com/t/track-template-state-the-template-instance-scoped-reactive-way-instead-of-using-session-vars/3048

ответ

1

Вы можете использовать , внутри или снаружи шаблона. Он будет перезапущен, как только одна из его реактивной зависимости изменится.

Пример вне шаблона:

Tracker.autorun(function() { 
    //will be run only once when Session.get('callSayHi') is true 
    if(Session.get('callSayHi') {//dependency on Session var 
    sayHi(); 
    Session.set("callSayHi", false); 
    } 
}); 

Пример внутри шаблона:

Template.yourTemplate.onCreated(function(){ 
    this.autorun(function() { 
    //will be run only once when Session.get('callSayHi') is true 
    if(Session.get('callSayHi') {//dependency on Session var 
     sayHi(); 
     Session.set("callSayHi", false); 
    } 
    }); 
}); 
+0

, конечно, это может быть улучшено за счет использования чего-то иного, чем Варс Session. Что-то вроде объекта, который обрабатывает многократные события, хранящиеся в ReactiveVar – Guillaume