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

时间:2016-01-31 07:49:57

标签: javascript google-maps meteor coffeescript

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

pictureBox3

由于未定义Meteor.user(),我无法使地图生效。我如何等待定义Meteor.user()?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我的一个应用程序必须执行类似等待订阅的操作。我在路由器中定义了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()处理程序中

答案 2 :(得分:0)

为meteor / react here发布了答案,但是同样可以用火焰完成。我不熟悉大火,但在您的Template.body.onRendered函数中,您可以听取确保在呈现任何内容之前配置登录服务。

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

我建议将此逻辑提取到更高级别,这样您就不会重复相同的代码。