2016-05-22 6 views
0

Ich verwende den Iron Router. Ich habe einen RouterController, die etwa wie folgt aussieht:Meteor-Abonnement wird trotz WaitOn nicht aktualisiert.

var loggedInUserController = RouteController.extend({ 
    layoutTemplate: "GenericLayout", 
    waitOn: function() { 
     return Meteor.subscribe("TheDataINeed"); 
    } 
}); 

Und ich habe eine Route definiert, die diesen Controller für die 'TheDataINeed' zu warten, verwendet:

Router.route("/myapp", { 
    name: "Landing", 
    controller: loggedInUserController, 
    data: function() { 
     if(this.ready()){ 
      return {content: "page-landing"}; 
     } 
    } 
}); 

Jetzt ist das Problem, die Daten-I abonniert bin zu bedingt ist: das heißt, abhängig von der Rolle des Benutzers, veröffentliche ich verschiedene Daten, etwa so:

if (!Roles.userIsInRole(this.userId, 'subscribed')) { 
     return [ 
      myData.getElements({}, { fields: { _id: 1, title: 1}, limit: 5 }) 
     ]; 
    } else { 
     return [ 
      myData.getElements({}, { fields: { _id: 1, title: 1} }) 
     ]; 
    } 

Wenn die Rolle des Benutzers nicht ‚abonniert‘, beschränke ich die Daten t veröffentlicht o 5 Elemente.

Das Problem ist Veröffentlichung ist nicht reaktiv, wenn der Benutzer seine Rolle zum ersten Mal zu "abonniert" ändert und ich zu meiner Route ("/ myapp") navigiere, sieht der Benutzer stattdessen die begrenzte Anzahl von Elementen von allen.

Gibt es eine Möglichkeit, das Abonnement manuell neu auszulösen, wenn ich diese Route lade? Wenn möglich, möchte ich dies tun, ohne neue Pakete zu meiner App hinzuzufügen.

Antwort

0

Nicht sicher über diesen Ansatz, aber können Sie versuchen, Sitzungswert in Route anstelle von Abonnement-Code festzulegen. Dann können Sie in einer Datei auf der Client-Seite, auf der sich Ihre Abonnements befinden, Meteor.subscribe("TheDataINeed") in Tracker.autorun einbinden und eine Sitzung als Abonnementparameter haben. Jedes Mal, wenn dieser Sitzungswert geändert wird, wiederholt autorun das Abonnement erneut und gibt Ihnen Daten basierend auf einem neuen Wert zurück.

Verwandte Themen