2017-01-16 2 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); 
    }); 
} 

Update

Это отрывок из того, что шаблон выглядит следующим образом. Все отлично работает для четырех {{#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

В раскрывающемся списке bootstrap у меня есть строки вроде этого ... '{{#if canManagePatients}}

  • Manage Users
  • {{if}}' Это работает отлично, за исключением того, тип скрывает содержимое. – Hans

    +0

    Не нужно ли выпадающему меню инициализировать javascript? –

    ответ

    1

    Этот вид государственной инициализации является неподходящим для помощника. - это лучше, если ваши помощники являются лицами без гражданства, поскольку их можно назвать чаще, чем вы ожидаете.

    Лучше было бы использовать Tracker.autorun() для установки переменного сеанса (или реактивного вара), а затем ваш помощник, обратитесь к этому:

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

    Тогда ваш помощник может просто вернуть значение сессии переменная:

    Template.registerHelper('canManagePatients',() =>{ 
        return Session.get('canManagePatients'); 
    }); 
    
    Смежные вопросы