2014-01-16 3 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

유성 - 라우터에서 철 - 라우터로 아직 마이그레이션하지 않았으므로이 일을 위해 내가 할 수있는 것을 말할 수는 없습니다. 나는 이것이 사실 일반적인 사용 사례이므로 문서에없는 것이 조금 놀랍습니다. [suggest] (https://github.com/EventedMind/iron-router/issues/286)에서 몇 가지 제안 사항을 살펴보십시오. –