从 Backbone 习惯转换为 Meteor:触发事件

Converting from Backbone habits to Meteor: trigger events

在 Backbone 中,如果你想在模型之间交谈,你通常会通过事件进行。例如,如果 sayHi() 应该在 Friend 模型而不是 Stranger 模型中完成,您将执行以下操作。

陌生人内部

Friend.trigger("callSayHi");

朋友里面

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

我想在 Meteor 中做同样的事情,我想使用 Session var fitted。

陌生人内部

Session.set("callSayHi", true);

朋友里面

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

让我们在这里忽略范围问题(使用 ReactiveVar 更好,等等)。问题是,为了更恰当地处理这种情况,我必须在末尾再次将会话变量设置为 false,但这会无限地调用 sayHi() 事件。我觉得这种情况很常见。 Meteor 的处理方式是什么?

可能相关: https://forums.meteor.com/t/track-template-state-the-template-instance-scoped-reactive-way-instead-of-using-session-vars/3048

您可以在模板内部或外部使用 tracker。一旦其反应依赖项之一发生变化,它将重新运行。

模板外的示例:

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);
    }
  });
});