当我在模板的助手中返回一些不是静态的东西时,Meteor会抛出一个错误“来自Deps recompute:username的异常”。
Router.configure({
layoutTemplate: 'layout'
});
Router.map(function() {
this.route('home', {path: '/'});
this.route('dashboard');
})
if (Meteor.isClient) {
Accounts.ui.config({
passwordSignupFields: 'USERNAME_AND_EMAIL'
});
Template.dashboard.helpers({
username: function() {
return Meteor.user().username;
}
});
}
<template name="layout">
<h1>Layout</h1>
{{yield}}
</template>
<template name="home">
{{#link route='dashboard'}}Dashboard{{/link}}
</template>
<template name="dashboard">
{{#link route='home'}}Home{{/link}}
{{username}}
</template>
奇怪的是,当通过单击主页模板中的链接访问仪表板路径时,一切正常。但是当我在网址栏中输入/仪表板时,我收到了该错误。
答案 0 :(得分:1)
当您手动导航到URL时,它会强制meteor重新运行登录过程。因此,在它执行此操作时,Meteor.user()
将不会返回有效对象(因此您无法访问username
)。你有两个选择:
为您的代码添加一个守卫,如:
Meteor.user() && Meteor.user().username;
或让您的路由器在登录过程正在进行时显示“登录”页面。