2016-06-11 8 views
2

目的:私は購読呼び出しの後を取得された文書に基づいて、私のフロールータ機能からテンプレートAまたはテンプレートBの中の1つを、レンダリングします。フロールータでのサブスクリプションに待機

は具体的には、私は、管理者またはユーザー文書のisAdminフィールドに基づいて、学生のテンプレートのいずれかをレンダリングしたい、完了呼を購読を取得しました。 ルータの機能は次のとおりです。

FlowRouter.route('/songs/list', { 
 
    name: 'Songs.list', 
 
    subscriptions: function(params, queryParams) { 
 
    this.register('getUser', Meteor.subscribe('allUsers', Meteor.userId())); 
 
    } 
 
    action(params, queryParams) { 
 
    \t if(Meteor.user().isAdmin){ 
 
    \t \t BlazeLayout.render("admin_home"); 
 
    \t } 
 
    \t else{ 
 
    \t \t BlazeLayout.render("student_home"); 
 
    \t }  
 
    } 
 
});

フロールータのマニュアルには

FlowRouterのみサブスクリプションの登録を扱っていることを、具体的に言及しています。サブスクリプションが準備完了するまで待つことはありません。

だから、「条件場合は、」サブスクリプションは、ローカルキャッシュを更新した前に評価される場合があるかもしれません。

iron-routerを使用すると、waitOnを使用して簡単に処理できます。しかし、フロールーターでは、2つの別々の機能が必要になります。これは、管理用テンプレートと学生用テンプレートをレンダリングするために2つの別個のURLをさらに強制します。

これはフロールータの開発者が設計したものですか?

+0

を(https://www.okgrow.com/posts/flow -router-migration-guide) –

答えて

0

試行: Meteor.subscribe( 'ALLUSERS'、{ OnReady(){ IF(Meteor.user()isAdmin){BlazeLayout.render( "admin_home");}他{BlazeLayout.render(」。 student_home ");}}

3

なぜルーティングのうち、サブスクリプション・ロジックを実行し、組み込みTemplate.subscriptionsReadyヘルパーとtemplate level subscriptionsを使用しないで

FlowRouter.route('/songs/list', { 
    name: 'Songs.list', 
    action: function(params) { 
     BlazeLayout.render('home'); 
    } 
}); 
<template name="home"> 
    {{#if Template.subscriptionsReady}} 
     {{#if isAdmin}} 
      {{> admin_home}} 
     {{else}} 
      {{> student_home}} 
     {{/if}} 
    {{/if}} 
</template> 
Template.home.onCreated(function() { 
    this.subscribe('allUsers', Meteor.userId()); 
}); 

Template.home.helpers({ 
    isAdmin: function() { 
     // check if user is admin 
    } 
}); 

このアプローチもrecommended in FlowRouter docsです。

0

私はFlowRouter.subsReadyという機能をルータ内(IronRouterに似た)で使用する方法の例がdocs hereで提供されていると思います。

だからあなたの場合には、それはのようなものに見えるかもしれません:[(ブレイズと)アイアンルータからFlowRouterへの移行]あなたが読むべき

FlowRouter.route('/songs/list', { 
    name: 'Songs.list', 
    subscriptions: function(params, queryParams) { 
     this.register('getUser', Meteor.subscribe('allUsers', Meteor.userId())); 
    }, 
    action(params, queryParams) { 

     Tracker.autorun(function() { 

      var ready = FlowRouter.subsReady("getUser"); 

      Tracker.nonreactive(function(){ 

       if(ready && Meteor.user().isAdmin){ 
        BlazeLayout.render("admin_home"); 
       } 
       else if(ready){ 
        BlazeLayout.render("student_home"); 
       } 
       else { 
        BlazeLayout.render("loading"); 
       } 

      }); 
     }); 
    } 
}); 
関連する問題