2016-09-28 1 views
1

Auf der Client-Seite einer METEORJS-Anwendung habe ich einen Controller, der einige Benutzer anzeigt.Meteor.user() ist im clientseitigen Controller nicht definiert

Ich habe ein Problem mit Meteor.user() -Funktion, der Fehler ist: Meteor.user (...) ist nicht definiert.

Hier ist mein Code:

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() { 

}}); 

Es ist in der Datenfunktion. Ich versuche, alle Benutzer, die mit dem angemeldeten Benutzer verbunden sind und das gleiche labo_id-Feld abgerufen haben ...

Ich weiß nicht, warum es mir das geben, weil in der onBeforeAction-Funktion kann ich auf Meteor zugreifen .user(), und speziell sein Profil ...

Jemand weiß, was kann ich tun, um es laufen zu lassen?

Vielen Dank für Ihre Zukunft Antworten :)

+0

Ich nehme an, die logische Antwort ist, dass kein Benutzer angemeldet ist, wenn die Funktion data() aufgerufen wird. – mwarren

+0

Der Benutzer ist angemeldet, der adminusercontroller rendert und verwaltet einen privaten Teil der Anwendung, so dass der Benutzer für den Zugriff angemeldet werden muss. –

Antwort

2

Dies ist ein Timing-Problem. Meteor.user() gibt nicht unbedingt Daten zurück, wenn sie noch nicht geladen wurden. Meteor.userId() wird jedoch die _id des Benutzerdatensatzes zurückgeben (wenn sie angemeldet sind). Wenn Sie Ihre Abfrage so ändern können, dass sie auf _id basiert, kann sie funktionieren.

Je nachdem, welchen Router Sie verwenden, können Sie einen resolve: -Eintrag hinzufügen, um sicherzustellen, dass die Route darauf wartet, dass der Benutzerdatensatz geladen wird, bevor er aktiviert wird.

+0

Danke für die Antwort! Ja, ich benutze den Eisen-Router, ich denke auch, es ist ein Timing-Problem. Ich versuche, was du gesagt hast und komm später zu dir zurück, danke. –

+0

Ich löste es, fügen Sie einfach If (Meteor.user()) {...} um die Abfrage, um Benutzer abzurufen. Jetzt funktioniert es, danke! –

Verwandte Themen