繁体   English   中英

如何等待Meteor.user()在Template onRendered中定义

[英]How to wait for Meteor.user() to be defined in Template onRendered

我正在研究Meteor项目,我需要访问存储在用户个人资料中的一些信息才能在页面上绘制地图。 但是,当我尝试访问Meteor.user()时,收到未定义的信息,因为调用该函数时,尚未加载Meteor.user()。

Template.body.onRendered () ->
    console.log Meteor.user()
    address = Meteor.user()['profile']['address']

    GoogleMaps.ready 'studyMap', (map) ->
        # maps code that relies on address

由于未定义Meteor.user(),因此无法使地图正常工作。 如何等待Meteor.user()定义?

我认为您仅在address = Meteor.user()['profile']['address']加载时才需要异步回调来加载地图。 至于如何实现这一点,我不确定。

我的一个应用程序必须执行类似操作才能等待订阅。 我在路由器中定义了waitOn()处理函数。

Router.map(function(){
  this.route('Brocator', {
    path: '/',
    template: 'brocator',
    waitOn: function() {
      return (Meteor.subscribe('people', this.params._gridId)
        && Meteor.subscribe('gridlog', this.params._gridId) );
    },
    data: function() {
      var gridId = this.params._gridId;
      return (People.find({gridId: gridId})
        && GridLog.find({gridId: gridId}));
    },
    fastRender: true
  }),
  ... other routes deleted for clarity
})

您可能决定按照以下方式使用某些东西:

return Meteor.user() != 'undefined';

在您的waitOn()处理函数中。

在这里发布流星/反应的答案,但是同样可以大放异彩。 我对火焰并不熟悉,但是在Template.body.onRendered函数中,您可以侦听以确保在呈现任何内容之前已配置登录服务。

Tracker.autorun(() => {
  if (Accounts.loginServicesConfigured()) {
    // accounts is ready go ahead and render
  } else {
    // still waiting show loading spinner
  }
});

我建议将此逻辑提取到更高的级别,以免您重复执行相同的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM