2015-04-03 13 views
2

我有包裹在一個流星{{的#if currentUser}}的代碼塊塊作爲這樣:流星{{的#if currentUser}}不表現爲預期

<template name="setup"> 
 
    {{#if currentUser}} {{> step1}} {{else}} {{redirect}} {{/if}} 
 
</template> 
 
<template name="setup2"> 
 
    {{#if currentUser}} {{> step2}} {{else}} {{redirect}} {{/if}} 
 
</template> 
 
<template name="step1"> 
 
    <div class="fullscreen"> 
 
    Setup: Step 1 of 2 
 
    <div class="buttons"> 
 
     <a class="btn btn-primary" href="{{pathFor 'setup2'}}">Next</a> 
 
    </div> 
 
    </div> 
 
</template> 
 
<template name="step2"> 
 
    <div class="fullscreen"> 
 
    Setup: Step 2 of 2 
 
    <div class="buttons"> 
 
     <a class="btn btn-primary" href="{{pathFor 'setup'}}">Previous</a> 
 
     <a class="btn btn-primary" href="{{pathFor 'home'}}">Complete</a> 
 
    </div> 
 
    </div> 
 
</template>

和在我的javascript輔助函數重定向這樣的:

 //setup redirects 
 
    Template.setup.helpers({ 
 
     redirect: function() { 
 
     return Router.go('login'); 
 
     } 
 
    }); 
 
    Template.setup2.helpers({ 
 
     redirect: function() { 
 
     return Router.go('login'); 
 
     } 
 
    });

但是,當我訪問/ setup或/ setup2頁面時,即使當前用戶已登錄,他們也總是重定向到登錄頁面。可能是什麼原因導致了這種情況?感謝任何幫助。謝謝!

+1

這就是你不應該與助手在做這樣的事情 - 看[此帖]的「過度勞累助手」一節(http://dweldon.silvrback.com/common-mistakes)。處理這個問題的正確方法是在路由器中。 – 2015-04-03 01:09:24

回答

3

像大衛·韋爾登說,你可以使用鐵:路由器此。例如更具體地說是Router.onBeforeAction

創建te函數和這樣的鉤子。

var requireLogin = function() { 
    if (! Meteor.user()) { 
    if (Meteor.loggingIn()) { 
     this.render(this.loadingTemplate); 
    } else { 
     this.render('redirect'); 
    } 
    } else { 
    this.next(); 
    } 
} 

Router.onBeforeAction(requireLogin, {only: 'setup'}); 
Router.onBeforeAction(requireLogin, {only: 'setup2'}); 

或在data:function(){},像這樣。

data:function(){ 
    if(!Meteor.userId()){ 
    this.render('redirect') 
    }else{ 
    this.next(); 
    } 
} 

因此,您可以刪除模板助手並在路由器邏輯上執行此操作。