2016-05-18 3 views
0

Я пытаюсь установить первую страницу для загрузки в моем приложении meteor, в зависимости от того, зарегистрирован пользователь или нет. (Если пользователь не выполнил вход в систему, загрузите шаблон x, иначе загрузите шаблон signIn).Стартовая страница на Meteor

Проблема заключается в том, что у моего шаблона входа есть ссылки на другие шаблоны (пароль восстановления и регистрация), которые не работают (страница всегда остается в шаблоне входа, вероятно, моей опцией «if currentUser»). Наверное, я подхожу к нему неправильно.

Любая идея, как установить первую страницу для загрузки? Это мой html:

<template name="main"> 
    {{#if currentUser}} 
    {{> header}} 
    {{> yield}} 
    {{else}} 
    {{> entrySignUp}} 
    {{/if}} 
</template> 

<template name="home"> 
    {{#if eventJoined}} 
    {{> board}} 
    {{else}} 
    {{> findEvent}} 
    {{/if}} 
</template> 

Это мои маршруты. Myapp.js:

Router.route ('/home') 
Router.route('/', { template: 'home'}); 
Router.configure({layoutTemplate: 'main'}); 
Router.route('/findEvent'); 
Router.route('/board'); 
+0

Не можете добавить код маршрута и все связанные коды? Вероятно, у вас есть {{> yield}} только для currentUser. Утюг: маршрутизатор нуждается в {{> yield}}, чтобы отобразить остальные маршруты/шаблоны. – Luna

+0

Хорошо, я уже редактировал вопрос. – Ruben

ответ

1

Вы должны указать, какой маршрут делает какой шаблон, как это:

Router.configure({ 
    layoutTemplate:'mainTemplateName', 
    loadingTemplate: 'loadingTempName' 
}); 

Router.route('/', function() { 
    this.render('home'); 
}); 

Router.route('/another-route', function() { 
    this.render('anotherTemplate'); 
}); 

Любой из этих шаблонов воздаст {{> выход}} так, если у вас есть внутри if currentUser, он не сможет отображать их для пользователей, не являющихся пользователями.

EDIT

Ваш основной шаблон/макет должен содержать основные элементы макета, как панели навигации, колонтитул, боковая панель и т.д. Они только делают один раз, когда пользователь входит на сайт. {{> Выход}} указует, где остальные шаблоны должны оказывать, когда пользователь переходит на другие маршруты, без изменения/повторной визуализации элементов в макете/основного шаблоне

EDIT-2 В вашем основном шаблоне , у вас есть это:

{{#if currentUser}} 
    {{> header}} 
    {{> yield}} 
{{else}} 
    {{> entrySignUp}} 
{{/if}} 

что означает {{> yield}} железа: маршрутизатор только для зарегистрированных пользователей. Вам нужно, чтобы доход был для всех посетителей, чтобы пользователи могли перейти на другие маршруты. Утюг-маршрутизатор может отображать другие шаблоны, такие как восстановление пароля/регистрации, как вы писали в своем вопросе. Итак, включите {{> yield}} за пределы {{#if currentUser}} и используйте его везде, где это необходимо. Например:

Основной шаблон:

<template name="layout"> 
    {{> navigation}} 

    <div class="content-area"> 
     {{> yield}} 
    </div> 
</template> 

<template name="navigation"> 
    This will always be visible in every route according to the template above. 
</template> 

Вы также можете сделать проверку в вашем router.js, чтобы определить, что делают так:

Router.route('/', function() { 
    if(Meteor.user()){ 
     this.render('someTemplate') //for logged in user in route '/' 
    } else { 
     this.render('entrySignUp'); 
    } 
}); 

Router.route('/findEvent'); 
Router.route('/board'); 

В этом случае, независимо от того, который маршрут, который вы делаете, шаблоны выше всегда будут отображаться на {{> yield}}, не в зависимости от того, должен ли он быть пользователем или нет, но {{> yield}} должен быть доступен как для зарегистрированных пользователей, так и для входа в систему, для железного маршрутизатора, на самом деле есть место для рендеринга шаблоны для не-пользователей, в вашем случае.

+0

На самом деле у меня есть соответствие между именами маршрутов и именами моих шаблонов (одноименное имя маршрута/шаблона), поэтому Iron Router не нужно, чтобы я был конкретным в предложении render.Я не понимаю вашего ответа, если мне нужно делать изменения в HTML или удалять '#if currentUser' – Ruben

+0

{{> yield}} - это место, где iron: router отображает шаблоны. Вы говорите железному маршрутизатору, чтобы отобразить его для currentUser. Это неверно. Выход должен быть как текущим пользователем, так и не-пользователями. Его место iron: router визуализирует любой шаблон для любого, так что да, вы должны изменить свой html. – Luna

+0

@ Рубен позвольте мне просто привести пример в моем ответе ... – Luna

Смежные вопросы