【问题标题】:Converting from Backbone habits to Meteor: trigger events从 Backbone 习惯转换为 Meteor:触发事件
【发布时间】:2015-07-17 15:53:52
【问题描述】:

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

在陌生人里面

Friend.trigger("callSayHi");

朋友圈

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

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

在陌生人里面

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

【问题讨论】:

    标签: meteor backbone-events eventtrigger


    【解决方案1】:

    您可以在模板内部或外部使用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);
        }
      });
    });
    

    【讨论】:

    • 当然,这可以通过使用 Session vars 以外的东西来改善。类似于处理存储在 ReactiveVar 中的多个事件的对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多