如何创建一个等待来自另一个模板的onRendered事件的方法?

时间:2016-04-06 14:10:01

标签: javascript asynchronous meteor

我正在使用离子框架包,我有一个侧边栏类。有一个名为ionSideMenu.snapper的类,它在查看源代码时是在呈现ionSideMenuContainer模板时定义的,所以我通过执行以下操作来解决这个问题:

import {Template} from "meteor/templating";
import {ReactiveField} from "meteor/peerlibrary:reactive-field";

export const Snapper = new ReactiveField(false);

// now when the side menu is rendered, `IonSideMenu.snapper` should be defined.
Template['ionSideMenuContainer'].onRendered(() => Snapper(IonSideMenu.snapper));

但是,我想在我的Sidebar类上创建一个静态方法,等待定义Snapper,然后运行disabled函数。

export class Sidebar extends BlazeComponent {
  static disable() {
    // await the snapper to be defined
    Snapper().disable();
  }
}

这个等待功能如何完成,这样我可以从任何其他模板调用它,它会在渲染时禁用?

1 个答案:

答案 0 :(得分:0)

相信我找到了答案。如果有人需要,可以发布。

import {Tracker} from "meteor/tracker";

// ...
class Sidebar extends BlazeComponent {
  static _awaitSnapperReady(callback) {
    Tracker.autorun(c => {
      const snapper = Snapper();
      if (snapper) {
        callback(snapper);
        c.stop();  // end the current computation.
      }
    });
  }
  static disable() {
    Sidebar._awaitSnapperReady(snapper => snapper.disable());
  }
}