2016-09-28 18 views
1

在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呈現並管理應用程序的私有部分,因此用戶必須登錄才能訪問它。 –

回答

2

這是一個計時問題。 Meteor.user()不一定會返回數據,如果尚未加載。然而,Meteor.userId()會返回用戶記錄的_id(如果它們已登錄)。如果你可以改變你的查詢來依賴那個_id,那麼它可以工作。

根據您使用的是哪個路由器,您可以添加一個resolve:條目以確保路由器等待用戶記錄在激活之前加載,然後您的查詢才能工作。

+0

感謝您的回覆! 是的,我使用鐵路路由器,我認爲這是一個時間問題。 我嘗試你所說的話,稍後再回來給你,謝謝。 –

+0

我解決了它,只需在查詢周圍添加if(Meteor.user()){...}來檢索用戶。 現在工作,謝謝! –