我正在研究Meteor项目,我需要访问存储在用户个人资料中的一些信息,以便在页面上制作地图。但是,当我尝试访问Meteor.user()时,我收到undefined,因为在调用该函数时,Meteor.user()尚未加载。
pictureBox3
由于未定义Meteor.user(),我无法使地图生效。我如何等待定义Meteor.user()?
答案 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
}
});
我建议将此逻辑提取到更高级别,这样您就不会重复相同的代码。