在meteor中,如何等待订阅并在模板`rendered`函数中访问它们?

时间:2015-11-17 06:19:38

标签: meteor flow-router

我在我的应用中使用FlowRouter,在Meteor中使用新手。我订阅了我的收藏:

Template.PanelEditAbout.onCreated(function() {
    var self = this;
    self.autorun(function() {
        self.subscribe('pages', 'about');
    });
});

我试图在rendered函数中使用订阅但它不起作用:

Template.PanelEditAbout.rendered = function() {
    page = Pages.findOne({
        slug: 'about'
    });
}

如果我是正确的,我必须等待订阅可用。我怎样才能做到这一点?我还需要在它准备好时添加一个加载消息(或一个微调器)。我知道如何在IronRouter中执行此操作,但不知道如何在FlowRouter中执行此操作。

2 个答案:

答案 0 :(得分:3)

首先不要在onRendered订阅。试试以下内容:

Template.PanelEditAbout.onCreated(function() {
  this.subscribe('pages', 'about');
});

Template.PanelEditAbout.onRendered(function() {
  let page = {};

  this.autorun(() => {
    if (this.subscriptionsReady()) {
      console.log('subs ready');
      page = Pages.findOne({
        slug: 'about'
      });
    }

    console.log(page);
  });
});

答案 1 :(得分:1)

如果是您的出版物名称,您可以在订阅期间使用onReady。

UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"My Alert"


       message:@"This is an alert."
                                   preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
       handler:^(UIAlertAction * action) {}];

    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];

控制台日志只是一个例子。