Метеоритный маршрутизатор - как я могу определить, требует ли текущий маршрут входа пользователя в систему?

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

Вот шаблон макета:

<template name="layout">

  {{#if requireLogin}}
    <!-- ... render route content or login form ... -->
      {{#if currentUser}}
        {{> yield}}
      {{/if}}
      {{#unless currentUser}}
        {{> loginPage}}
      {{/unless}}
  {{/if}}

  {{#unless requireLogin}}
    <!-- ... render route content ... -->
    {{> yield}}
  {{/unless}}

</template>

Пример страницы маршрута с requireLogin Информация:

<template name="pageUser">
  {{requireLogin true}}
  <!-- ... some user page content ... -->
</template>

<template name="pageTermsOfUse">
  {{requireLogin false}}
  <!-- ... some Terms of use page content ... -->
</template>

И код клиента:

if (Meteor.isClient) {
  Handlebars.registerHelper("requireLogin", function (requireLogin) {
    console.log(requireLogin)
    return requireLogin;
  });
};

console.log должен вернуться true для страницы пользователя и false Условия использования страницы, но вместо этого она регистрирует:

undefined
undefined
true

Даже когда requireLogin установлен в True раздел {{#unless requireLogin}} оказано. Любое предложение, как решить эту проблему, может помочь.

1 ответ

Вам нужно будет сохранить requireLogin ценность где-то. Вы можете просто использовать переменную сеанса.

Template.registerHelper("requireLogin", function (requireLogin) {
  if(requireLogin) Session.set('requireLogin', requireLogin);
  return Session.get('requireLogin');
});

Кроме того, я бы использовал Template и не Handlebars,

Другие вопросы по тегам