2014-01-16 5 views
0

Meteor выдает сообщение об ошибке «Исключение из Deps recompute: username», когда я возвращаю что-то не статичное внутри помощников шаблона.Meteor throwing «Исключение из Deps recompute»

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> 

Странная вещь, когда посетить маршрут приборной панели, нажав на ссылку в главном шаблоне, все работает отлично. Но когда я набираю/панель инструментов в строке url, я получаю эту ошибку.

ответ

1

Когда вы вручную переходите к URL-адресу, он заставляет метеор повторно запускать процесс входа в систему. Таким образом, пока он делает это, Meteor.user() не вернет действительный объект (и поэтому вы не можете получить доступ к username). У вас есть два варианта:

Добавить охранник в код, как:

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

или иметь свой маршрутизатор показать «вход в системе» странице, а процесс Логина продолжается.

+0

Спасибо :) И как бы я попросил мой маршрутизатор ждать, пока процесс входа в систему запущен? – zimt28

+0

Я еще не перешел из метеоритного маршрутизатора в железо-роутер, поэтому я не могу сказать, что я для этого делаю. На самом деле я немного удивлен, что это не в документах, так как это такой распространенный вариант использования. Посмотрите на [this] (https://github.com/EventedMind/iron-router/issues/286) вопрос для некоторых предложений. –