我正试图让我的头脑,为帐户持有人和客人设置不同的主路线模板。我似乎不能根据用户是否登录而呈现不同的模板(两个不同的导航条)。我已经为客人建立了一个模板
//guest.js
<template name="unregistered">
{{>navUnreg}}
<div class="container">
{{>about}}
</div>
</template>
<template name="navUnreg">
<nav class="navbar navbar-default">
<div class="container">
<ul class="nav navbar-nav">
<a class="navbar-brand" href="#">CabStack</a>
</ul>
<ul class="nav navbar-nav navbar-right">
{{>loginButtons}}
</ul>
</div>
</nav>
</template>对于未登录的用户来说,这是一个通用的有关页面。然后,我为已登录的帐户用户提供了模板,该模板是-
//UserLoggedIn.js
<template name="cabMaster">
{{>cabNav}}
<div class="container">
{{>yield}}
</div>
</template>我最初尝试在路由器配置中放置if/ into语句-
//config.js
Router.configure({
if(Meteor.user()){
layoutTemplate: "cabMaster"
}
else{
layoutTemplate: "unregistered"
}
});然而,我总是被抛出一个错误。我已经在userLoggedIn.js页面上使用了userLoggedIn.js来限制对路由的访问,直到配置文件页被填充,这是
//Access rights for logged in users
function userNoAccess(){
if(!Meteor.userId()){
alert("restricted until profile page completed");
this.render(“profile”);
return pause();
} else {
this.next();
}
}
//Do not allow access to nav links until user has filled out ‘profile’ page.
Router.onBeforeAction(userNoAccess, {
only: ["dashboard", "edit_dashboard", "help"]
});所以
我确实考虑过将userLoggedIn路由放在Accounts.onLogin()函数中,这是我在client.js文件中拥有的,但是我希望将所有路由保持在一个位置。有没有人对我如何做到这一点有任何建议。谢谢
发布于 2015-11-05 22:56:29
有几种方法可以解决这个问题。例如,你不必在路由器中做任何事情。导航栏的选择可以在模板中进行:
<template name="navBar">
{{#if currentUser}}
{{> navReg}}
{{else}}
{{> navUnreg}}
{{/if}}
</template>当您试图更改布局的小部分而不切换整个布局时,这是非常方便的。
我建议您考虑使用控制器来处理经过验证和未经验证的路由。它们使您的路由代码更易于维护。我编写了一个基础教程,您可能会发现它很有用。
https://stackoverflow.com/questions/33555938
复制相似问题