2016-09-28 38 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関数でMeteorにアクセスできる理由はわかりません.user()、特に彼のプロフィール...

私はそれを実行させるために何ができるのですか?

今後のお返事ありがとうございます:)

+0

私は、論理的な答えは、data()関数が呼び出されたときにユーザーがログインしていないと仮定します。 – mwarren

+0

ユーザーはログインしています.adminusercontrollerはアプリケーションのプライベートな部分をレンダリングして管理します。そのため、ユーザーはアクセスするためにログに記録する必要があります。 –

答えて

2

これはタイミングの問題です。 Meteor.user()はまだロードされていない場合、必ずしもデータを返すわけではありません。 Meteor.userId()はユーザーレコードの_idを返します(ログインしている場合)。その_idに依存するようにクエリを変更することができれば、それは動作します。

解決方法:エントリを追加して、ユーザレコードをアクティブにする前にルートがロードされるのを待ってから、クエリが機能するようにすることができます。

+0

返信いただきありがとうございます! ええ、私は鉄のルータを使用している、私はあまりにもタイミングの問題だと思う。 私はあなたが言ったことを試して、後であなたに戻ってきます、ありがとう。 –

+0

私はそれを解決しました。単にif(Meteor.user()){...}をクエリの回りに追加してユーザーを取得してください。 これは機能しています。ありがとう! –

関連する問題