2014-10-26 35 views
5

我有幾個代碼只有在存在noUser和幾個存在currentUser時纔會運行。
所有這些都在導航模板中。是這樣的...流星需要時間才能知道是否存在{{currentUser}}

{{#if currentUser}} 
    <li class="nav"><a href="{{pathFor 'create'}}">Post</a> 
    </li> 
    <li class="nav"><a>Ola, {{thisUser}}!</a> 
    </li> 
    <li class="nav"><a href="#" id="logout">Log Out</a> 
    </li> 
    {{/if}} 

    {{#if noUser}} 
     <li class="nav"><a href="{{pathFor 'signup'}}">Sign Up</a> 
     </li> 
     <li class="nav"><a href="{{pathFor 'login'}}">Login</a> 
     </li> 
    {{/if}} 

所以問題是,當有一個currentUser(即我登錄),我刷新頁面,則{{#if noUser}}塊中的代碼顯示了第一則{{#if currentUser}}塊, {{#if noUser}}塊只是在沒有用戶時顯示出來。
這裏的模板的輔助代碼..

Template.navigation.helpers({ 

    thisUser: function() { 
      return Meteor.user().username; 

    }, 

    noUser: function() { 
     var user = Meteor.user(); 

     if (!user) { 
      return true; 
     }; 
    } 


}); 

不知道我在做什麼錯在這裏。 :(
請幫助。

回答

10

您應該使用其他條件而不是使用者幫助程序。爲了防止在登錄時顯示「noUser」塊,您必須使用{{ loggingIn }} helper。類似的內容:

{{#if loggingIn}} 
    <p>Loggin in...</p> 
{{else}} 
    {{#if currentUser}} 
    <li class="nav"><a href="{{pathFor 'create'}}">Post</a> 
    </li> 
    <li class="nav"><a>Ola, {{thisUser}}!</a> 
    </li> 
    <li class="nav"><a href="#" id="logout">Log Out</a> 
    </li> 
    {{else}} 
    <li class="nav"><a href="{{pathFor 'signup'}}">Sign Up</a> 
    </li> 
    <li class="nav"><a href="{{pathFor 'login'}}">Login</a> 
    </li> 
    {{/if}} 
{{/if}} 

因爲流星並不立即知道用戶是否登錄。因此你必須使用loggingIn幫助器。

0

你爲什麼不重構你的代碼是這樣?

{{#if currentUser}} 
    <li class="nav"><a href="{{pathFor 'create'}}">Post</a> 
    </li> 
    <li class="nav"><a>Ola, {{thisUser}}!</a> 
    </li> 
    <li class="nav"><a href="#" id="logout">Log Out</a> 
    </li> 
{{else}} 
    <li class="nav"><a href="{{pathFor 'signup'}}">Sign Up</a> 
    </li> 
    <li class="nav"><a href="{{pathFor 'login'}}">Login</a> 
    </li> 
{{/if}} 

你可能想看看以http://docs.meteor.com/#meteor_loggingin如果需要顯示加載指示器。

相關問題