客户端控制器中未定义Meteor.user()

问题描述:

在METEORJS应用程序的客户端,我有一个显示一些用户的控制器。客户端控制器中未定义Meteor.user()

我有一个Meteor.user()函数的问题,错误是:Meteor.user(...)是未定义的。

这里是我的代码:

this.AdminUsersController = RouteController.extend({ 
template: "Admin", 


yieldTemplates: { 
    'AdminUsers': { to: 'AdminSubcontent'} 

}, 

onBeforeAction: function() { 
    var permissions = Meteor.user().profile.permissions; 
    if (permissions && permissions.indexOf('Users') != -1) 
     this.next(); 
    else this.redirect('/admin/dashboard'); 
}, 

action: function() { 
    if(this.isReady()) { this.render(); } else { this.render("Admin"); this.render("loading", { to: "AdminSubcontent" });} 
    /*ACTION_FUNCTION*/ 
}, 

isReady: function() { 


    var subs = [ 
     Meteor.subscribe("users") 
    ]; 
    var ready = true; 
    _.each(subs, function(sub) { 
     if(!sub.ready()) 
      ready = false; 
    }); 
    return ready; 
}, 

data: function() { 

    var data = { 
     params: this.params || {}, 
     users: Users.find({labo_id: Meteor.user().profile.labo_id}, {sort: {createdAt:-1}}) 
    }; 


    return data; 
}, 

onAfterAction: function() { 

}}); 

它在数据功能。 我尝试检索所有连接到登录用户的用户,并得到相同的labo_id字段...

我不知道它为什么给我,因为在onBeforeAction函数中,我可以访问流星.user(),特别是他的个人资料...

有人知道我能做些什么来使其运行?

感谢您的未来答案:)

+0

我想合乎逻辑的答案是,当data()函数被调用时,没有用户登录。 – mwarren

+0

用户已登录,adminusercontroller呈现并管理应用程序的私有部分,因此用户必须登录才能访问它。 –

这是一个计时问题。 Meteor.user()不一定会返回数据,如果尚未加载。然而,Meteor.userId()会返回用户记录的_id(如果它们已登录)。如果你可以改变你的查询来依赖那个_id,那么它可以工作。

根据您使用的是哪个路由器,您可以添加一个resolve:条目以确保路由器等待用户记录在激活之前加载,然后您的查询才能工作。

+0

感谢您的回复! 是的,我使用铁路路由器,我认为这是一个时间问题。 我尝试你所说的话,稍后再回来给你,谢谢。 –

+0

我解决了它,只需在查询周围添加if(Meteor.user()){...}来检索用户。 现在工作,谢谢! –