2017-01-16 18 views
0

にログインするときに失敗するようだ:流星反応性は、私は次のようになり、私の流星アプリで効用関数のカップルを持っている

Template.registerHelper('canManagePatients',() =>{ 
    const id = Meteor.userId(); 
    const aa = new AccountAccess(id); 
    const val = aa.canManagePatients(); 
    return val; 
}); 

私の理解では、Meteor.userIdは()ので、recativeデータソースであるとということですログイン後、これらのヘルパーの状態が変わるはずです。

残念ながら、このように動作しません。リロードしない限り、これらのオプションはログイン後に非表示になります。何が欠けていますか?

これはAccountAccessクラスははuserIdを使用する方法である:

constructor(userId){ 
    if (typeof userId !== "undefined"){ 
    this._userId = userId; 
    } else { 
    this._userId = Meteor.userId(); 
    } 
} 

canManagePatients(){ 
    const practice = this.getCurrentPractice(); 
    if (!practice){ 
    return false; 
    } 
    const patientTagId = this._getPatientAdminTag()._id; 
    const ownerTagId = this._getOwnerTag()._id; 
    return practice.tags.some((obj)=>{ 
    return (obj === patientTagId || obj === ownerTagId); 
    }); 
} 

更新

これは、テンプレートがどのように見えるかの抜粋です。すべてはログイン後にリロード後、正しく機能4つの{{#if }}文を除いて正常に動作します

<div id="navbar" class="navbar-collapse collapse"> 
     {{#if Template.subscriptionsReady}} 
     <ul class="nav navbar-nav navbar-right"> 
     {{#if currentUser}} 
     <li class="dropdown"> 
      <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> 
      {{practice.name}}<br><b>Hello {{userName}}</b> (Not you? <b><u>Logout</u></b>)<span class="caret"></span> 
      </a> 
      <ul class="dropdown-menu"> 
      {{#if canManageUsers}}<li><a href="/manage-practice/users/">Manage Users</a></li>{{/if}} 
      {{#if canManageForms}}<li><a href="/manage-practice/registration/">Manage Registration Settings</a></li>{{/if}} 
      {{#if canManageForms}}<li><a href="/manage-practice/forms/">Manage Forms</a></li>{{/if}} 
      {{#if canManagePatients}}<li><a href="/manage-practice/reports/">Reporting</a></li>{{/if}} 

      <li role="separator" class="divider"></li> 
      <li><a href="/widgets">Use compact UI</a></li> 
      <li><a href="/dashboard">Use old UI</a></li> 

      <li role="separator" class="divider"></li> 
      <li><a id="linkLogout">Logout</a></li> 
      </ul> 
     </li> 
     {{/if}} 
     </ul> 
     {{/if}} 
    </div><!--/.nav-collapse --> 
+0

テンプレートの外観は? – MasterAM

+0

ブートストラップのドロップダウン内には次のような行があります。{{{#if canManagePatients}}

  • Manage Users
  • {{/ if}} 'これはうまくいきます。コンテンツを非表示にします。 – Hans

    +0

    そのドロップダウンをjavascriptで初期化する必要はありませんか? –

    答えて

    1

    状態初期のこの種のは、ヘルパーには不適切である - 。彼らは呼び出すことができますので、あなたのヘルパーがステートレスであれば、それは良いでしょうあなたが期待するよりも頻繁に。

    より良いアプローチは、セットアップにセッション変数(または反応VAR)をTracker.autorun()を使用して、あなたのヘルパーはそれに指す持っているだろう:

    Tracker.autorun(()=>{ 
        const aa = new AccountAccess(Meteor.userId()); 
        Session.set('canManagePatients',aa.canManagePatients()); 
    }); 
    

    次に、あなたのヘルパーはちょうどセッションの値を返すことができます変数:

    Template.registerHelper('canManagePatients',() =>{ 
        return Session.get('canManagePatients'); 
    }); 
    
    関連する問題