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

How do you create a method that awaits an onRendered event from another template?

本文关键字:另一个 onRendered 方法 事件 等待 创建 何创建 一个      更新时间:2024-02-08

我使用的是一个ionic框架包,我有一个侧边栏类。有一个名为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();
  }
}

这个等待的函数是如何完成的,这样我就可以从任何其他模板调用它,并且它在渲染时会被禁用?

相信我已经找到了答案。如果有人需要,请张贴。

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