2016-05-22 8 views
0

Iron Routerを使用しています。Metitor SubscriptionはWaitOnにもかかわらず更新されません

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

そして私は「TheDataINeed」を待つために、このコントローラーを使用して定義されたルートを持っている:私はこのようになりますことRouterControllerを持って

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

さて、問題は、データである私は、加入していますが、条件付きである:ユーザーの役割に応じて、意味、私はそうのような、さまざまなデータを公開:

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} }) 
     ]; 
    } 

ユーザーの役割が「購読」されていない場合は、私が公開されたデータtを制限しますo 5要素。

公開は反応的ではないため、ユーザーが最初に自分の役割を「購読」に変更して自分のルート(「/ myapp」)に移動すると、ユーザーは限られた数の要素しか表示されませんそれらのすべての。

このルートを読み込んでいるときに手動でサブスクリプションを再トリガする方法はありますか?可能であれば、私は自分のアプリケーションに新しいパッケージを追加しないでこれをしたいと思います。

答えて

0

このアプローチについてはわかりませんが、サブスクリプションコードではなくルートでセッション値を設定しようとする可能性があります。その後、サブスクリプションがあるクライアント側のファイルでMeteor.subscribe("TheDataINeed")Tracker.autorunにラップし、サブスクリプションパラメータとしてセッションを持つことができます。セッションの値が変更されるたびに、自動実行によってサブスクリプションが再実行され、新しい値に基づいてデータが返されます。

関連する問題