流星投掷“Deps recompute的例外”

时间:2014-01-16 21:23:14

标签: javascript meteor meteorite iron-router

当我在模板的助手中返回一些不是静态的东西时,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>

奇怪的是,当通过单击主页模板中的链接访问仪表板路径时,一切正常。但是当我在网址栏中输入/仪表板时,我收到了该错误。

1 个答案:

答案 0 :(得分:1)

当您手动导航到URL时,它会强制meteor重新运行登录过程。因此,在它执行此操作时,Meteor.user()将不会返回有效对象(因此您无法访问username)。你有两个选择:

为您的代码添加一个守卫,如:

Meteor.user() && Meteor.user().username;

或让您的路由器在登录过程正在进行时显示“登录”页面。